1. 程式人生 > >JS小tips 之 變量聲明提前

JS小tips 之 變量聲明提前

搜索 變量 rip tip %20 是否 dea cti pre

只討論變量聲明的提前:

理解這段代碼:

var name = "aaa";
function test(){
    alert(typeof name);
    var name = "bbb";
    alert(typeof name);
}
test();

- 答案:undefined, string

- 分析:

1、兩個原理:a、JS中變量的聲明會提前;b、JS的作用域原理以及對變量的搜索方式

2、第一次執行“typeof name”的時候,首先會在函數的作用域中查詢name是否存在。由於變量聲明的提前,局部作用域中對於name的聲明被提前了,但是未賦值,所以是undefined。

3、第二次比較好理解,是string。

4、由於局部作用域中已經找到name了,所以並不需要再在全局作用域中找,因此兩次考慮的name都是局部作用域中的。 具體可以查看《JavaScript高級程序設計》第四章中關於作用域的描述,並重點理解JS沿著作用域向上對變量的搜索過程。示意圖如下:

5、註意到有的時候瀏覽器會有一些默認的操作,這個時候需要具體分析。

技術分享

練習代碼

var x = 1;
function test2(x){
    alert(x);
    var x = 2;
    alert(x);
}

function test3(){
    alert(x);
    
var x = 3; alert(x); } test2(x); test3();

- 答案:1,2;undefined,3;

JS小tips 之 變量聲明提前