var tt = 'aa';
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test();
为什么第一个弹出undifine呢?
又:
var tt = 'aa';
function test(){
alert(tt);
//var tt = 'dd';
//alert(tt);
}
test();
弹出aa?
求各位大神解答下
主要是js中的hoisting机制,第二次tt变量声明提升了,根据js的作用域链,它会在函数的作用域中找到tt的声明,而不是全局变量tt,hoisting机制具体参见这篇文章http://segmentfault.com/blog/liangyi/1190000002582759
第一块的代码经过编译器的预编译后会变成这个样子:
根据js中函数作用域的特性,局部变量在整个函数作用域内都是有定义的,也就是说,这个时候局部变量会遮盖全局的同名变量,因此在函数体内alert的是局部变量tt。此时涉及到js的另外一个特性就是变量声明提前,即先var tt;然后再alert(tt),此时tt还没有被赋值,因此是undefined。
作用域内声明提升了
其实我觉得LZ对于局部 全局应当是了解的(这都不懂还去面试?)
只不过没有想到声明提升而已
楼主作用域链没有搞明白,先去看书吧
大家都已经回答的很好了,这是各类js书上作用域章节中都会出现的例子,哈哈。
那个公司面试的,那么简单~~~
求告知公司名