English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Глубокое понимание поднимания переменных в javascript

У функции 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 переменных. Надеюсь, это даст вам некоторое представление, и希望大家多多 поддерживать учебник крик.

Вам может понравиться