(申明:本文转自新浪微博@IT程序猿,附件是原图片)
题一
(function(){var a = b = 5})() console.log(a); console.log(b);
输出是 undefined , 5
因为 a 是通过var 申明的 但是 b = window.b 就全局变量 ,但是在严格模式下会报错('use strict'), 另外
var a = b = 5 ; 等价于 b = 5 ; var a = b ;
题二
原生方法
String.prototype.foo = String.prototype.foo || function(){/..code../}
主要应该是让你不要覆盖原有方法
题三
function test(){ console.log(a); console.log(foo()); var a = 1 ; function foo() { return 2}; } test()
运行结果应该是 undefined , 2 原因:变量和函数的申明都被提前了,但是变量没有赋值,因此是Undefined
题四
var fullName = "C"; var obj = { fullName : "A", prop:{ fullName:"B", getFullName:function(){ return this.fullName; } } } console.log(obj.prop.getFullName()); var dd = obj.prop.getFullName; console.log(dd());
第一个输出的B 第二个输出的是C,
在第一个console.log()中调用getFullName 的对象是obj.prop 因此this 指向B
在第二个console.log()中调用getFullName 的对象是window 因此this 指向C
题五
如何让题目四的log 输出 B 通过call 和apply 强制改变上下文
dd.call(obj.prop)