欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

来答对这道题,所有分给你,看看自己的js能力

更新时间: 2014-01-05 01:51:05 责任编辑: Author_N1

 

回答对这道题,所有分给你,看看自己的js能力
var tt = 'aa';
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test(); 


希望回答过后再去测试,这个题目绝对能考你作用域的概念。网易的一道面试题。反正我是回答错误了
--参考方法--
undefined dd
--参考方法--
引用:
undefined dd


++
--参考方法--
var tt = 'aa';
function test(){
alert(tt);
var tt = 'dd';
alert(tt);
}
test();  

==

var tt = 'aa';
function test(){
var tt;
alert(tt);
tt = 'dd';
alert(tt);
}
test();  

以上两者相同,JS对于同一作用域的变量(包括函数)会预先声明,即上面的在函数内部先执行了var tt;同样如果有函数的定义的话,也是如此。
--参考方法--
js预加载导致函数内部的tt被覆盖,第一个alert()时tt在其作用域内未定义,弹出undefined,第二个弹出'dd'。

PS:我面试时用过类似的题。
--参考方法--
javascript预编译和处理的问题,var申明的变量进行了预编译,赋值操作未执行,所以先输出undefined,不会报错或者输出全局变量tt的值,呵呵,很经典的问题

这个更加经典。。
var a = 10;
  function test() {
    a = 100;
    alert(a);
    alert(this.a);
    var a;
    alert(a);
  }
 test();

--参考方法--
原理:一个函数被定义的时候 它的“可访问属性链”会被生成,以上函数的可访问属性链 self->window。

当它被执行的时候,首先创建函数自定义的变量(如 var a; 无论a在函数哪个地方定义,函数执行时会首先被创建,值为undifined)

函数引用到一个变量的时候,会循着“可访问属性链”查找,如果自身有定义,则不访问window。

(可访问属性链是我自定义的说法,哈哈 我忘了官方怎么称呼。)
--参考方法--
在函数体内定义了a 但是在alert的时候 a还没有初始化,未赋值 所以会输出undefined
--参考方法--
确实是undefind 和bb

不过,在下有个疑问
var tt = 'aa';
function test(){
alert(tt);
tt = 'dd';
alert(tt);
}
test(); 
和楼主的题目的唯一差别就是test函数内没有var
这个输出结果就是aa和bb了,

有人能给我答疑吗?
按照我的理解,无论是楼主的代码还是我代码,输出都应该是aa和bb。
因为test()刚运行时,scope内没有tt的定义,js引擎应该自动向scop chain的上一级转移(也就是window层面),在window中就有tt的定义。
--参考方法--
引用:
确实是undefind 和bb

不过,在下有个疑问
var tt = 'aa';
function test(){
alert(tt);
tt = 'dd';
alert(tt);
}
test(); 
和楼主的题目的唯一差别就是test函数内没有var
这个输出结果就是aa和bb了,

有人能给我答疑吗?
按照我的理解,无论是楼主的代码还是我代码,输出都应该是aa……

楼主内部重新定义了tt 先找到的是函数内的tt,找到了就不再往上找了 而且根据预编译 函数内的 var tt;会在函数内其他代码执行前执行
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:51:05
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/2014/
本文WWW.DOC100.NET DOC100.NET版权所有。