English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
У функции JavaScript есть особенность, он сначала сканирует все строки функции, поднимая все объявленные переменные «вверх» к началу функции:
'use strict'; function foo() { var x = 'Hello, ' + y; alert(x); var y = 'Bob'; {} foo();
Хотя это режим strict, строка var x = 'Hello, ' + y; не вызывает ошибки, потому что переменная y была объявлена позже. Но alert показывает Hello, undefined, что означает, что значение переменной y undefined. Это正是因为 JavaScript движок автоматически поднимает объявление переменной y, но не поднимает его значение.
Для вышеуказанной функции foo() код, который видит JavaScript движок, эквивалентен:
function foo() { var y; // Подъем объявления переменной y var x = 'Hello, ' + y; alert(x); y = 'Bob'; {}
Из-за этой странной «особенности» JavaScript, пожалуйста, строго соблюдайте правило «сначала声明所有 переменные в функции» при определении переменных в функции.
function foo() { var x = 1, // x инициализируется как 1 y = x + 1, // y инициализируется как 2 z, i; // z и i undefined // Другие строки: for (i=0; i<100; i++) { ... {} {}
Вот и все, что я хочу поделиться с вами о глубоком понимании的提升JavaScript переменных. Надеюсь, это даст вам некоторое представление, и希望大家多多 поддерживать учебник крик.