JS小tips 之 變量聲明提前
阿新 • • 發佈:2017-10-26
搜索 變量 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 之 變量聲明提前