请问以下JS代码最后输出的len值是多少?
var len = 117;
let func = {
len: 935,
showLen: function() {
console.log(this.len);
},
show: function() {
(function(cb) {
cb();
})(this.showLen)
}
}
func.show();
正确答案 117
立即执行函数的this指向是window(非严格模式下),
因为作为一个匿名函数,在被调用的时候,我们往往就是直接调用,因此它的this是非常确定的,那么len就取window下的len值了即117。
// 在JavaScript的函数中,this始终指向调用者的上下文环境
var len = 117 // 5. 全局作用域中使用 var 定义的变量默认会成为 window 的属性,及 window.len
let func = {
len: 935,
showLen: function () {
console.log(this.len) // 4. this 此时指向的是 window,所以相当于打印 window.len
},
show: function () {
(function (cb) {
cb() // 3. cb 相当于 cb.call() 默认没有传入上下文环境时 this 指向全局的 window 对象
})(this.showLen) // 2. this 是 func 所以传入的是上面定义的 showLen 函数
}
}
func.show() // 1. 相当于 func.show.call(func),此时 this 是 func
var len=117;我们可以发现这个是用var声明的,属于全局变量,所以打印的结果为117;
若将var改为let,则打印的结果为undefined
因为let声明的全局变量不会挂载到window下面,但var会
函数只要不是new出来的,内部this指向都是window,其他的this指当前块
在非严格模式下,独立函数调用内部this都执行window, 函数直接调用,即没有打点调用或者作为构造函数调用,this指向window,和是不是立即执行函数没有关系。不信执行下面的代码。
var len = 117;
let func = {
len: 935,
showLen: function() {
console.log(this.len);
},
show: function() {
const f = function(cb) {
cb();
}
f(this.showLen)
}
}
func.show();
结果也是117
标签:function,函数,指向,cb,117,len,window,func From: https://www.cnblogs.com/longmo666/p/17817301.html