js變量提升深入理解
JavaScript的函數(shù)定義有個特點,它會先掃描整個函數(shù)體的語句,把所有申明的變量“提升”到函數(shù)頂部:
'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的聲明,但不會提升變量y的賦值。
對于上述foo()函數(shù),JavaScript引擎看到的代碼相當于:
function foo() {
var y; // 提升變量y的申明
var x = 'Hello, ' + y;
alert(x);
y = 'Bob';
}
由于JavaScript的這一怪異的“特性”,我們在函數(shù)內部定義變量時,請嚴格遵守“在函數(shù)內部首先申明所有變量”這一規(guī)則。最常見的做法是用一個var申明函數(shù)內部用到的所有變量:
function foo() {
var
x = 1, // x初始化為1
y = x + 1, // y初始化為2
z, i; // z和i為undefined
// 其他語句:
for (i=0; i<100; i++) {
...
}
}
以上這篇js變量提升深入理解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
淺談JavaScript中setInterval和setTimeout的使用問題
這篇文章主要介紹了淺談JavaScript中setInterval和setTimeout的使用問題,作者建議在任務龐大時盡量避免使用setInterval,需要的朋友可以參考下2015-08-08

