几个有意思的题目,进来看看
发布于 9 年前 作者 zouzhenxing 5033 次预览 最后一次回复是 9 年前 来自 分享
var a = 1; a.b = 2; a + a.b = ?
var a = "abc";a.b = "123";a + a.b = ?
var fn = function(){
console.log(a);
var a = 1;
console.log(a);
}();
(function(){
console.log(a);
(function(){
var a = 1;
console.log(a);
})();
})();
\n```13 回复
有没有高手分析下原理啊
这样写代码的一巴掌拍死
这样写代码的一巴掌拍死
这样写代码的一巴掌拍死
别拍了,就是我看到的面试题而已。呵呵 From Noder
说说自己的想法,有错误希望改正。 第一二两行的代码,应该设计到包装函数,对于Number,String等基本类型的数据,当给他们赋予属性的时候,会自己调用他们对于的包装函数,并赋予属性,但是当这句赋值属性的代码结束之后,属性会自动清除(我记得在JavaScript高级程序中有这种情况的描述),所以后面的a.b的值为undefined,所以a + a.b = NaN;
之后的两个应该涉及到变量声明提前,JavaScript在解析程序的时候,会检索整个作用域里面的代码,先把函数声明提前,再把变量声明提前。
首先,这样写代码的一巴掌拍死,出这种题的一般是扯蛋
其次:
前面2个问题,普通模式下楼上的答案就可以了,但是有一点,在strict模式下,对于包装对象的赋值操作是不允许的,会抛出中断error;后面两个问题比较简单了,前者是var的变量提升,后面就是纯粹函数作用域的问题了
第一题得3 第二题abc123 自豪地采用 CNodeJS ionic
@bendise 醉了。。。。。。你这都错了
@eyblog 要的就是这效果,出题的人就是要看乐子的 自豪地采用 CNodeJS ionic
面试题吧,就是让你不会,然后好压价。 From Noder
关于
var a = 1; a.b = 2;http://ecma-international.org/ecma-262/5.1/#sec-8.7.28.7.2 PutValue (V, W)
由于
var a = 1;, 所以HasPrimitiveBase(V)为true, 将使用下面这个put内部方法,b不是a的属性, 去到了7, 如果是严格模式, 将抛出一个TypeError, 否则Return