var length = 20; function fn() { console.log(this.length); } var obj = { length: 10, method: function(fn) { fn(); arguments[0](); } }; obj.method(fn, 1,"aa");
时间: 2024-02-14 16:09:43 浏览: 174
这段代码的输出结果是什么?
答案是: 20 和 3。
代码中定义了一个全局变量 length,并定义了一个函数 fn,该函数打印出 this.length 的值。然后定义了一个对象 obj,该对象包含了一个属性 length 和一个方法 method,方法中执行了两次 fn 函数,第一次直接调用 fn 函数,此时 fn 函数中的 this 指向的是全局对象,因此输出 20;第二次通过 arguments[0]() 的方式调用 fn 函数,此时 fn 函数中的 this 指向的是 arguments 对象,因此输出 3(因为 arguments 对象的长度为 3)。
相关问题
var obj={fn1.function (){console.log(this)},fn2()=>{console.log(this)}} obj.fn1();obj.fn2()
这段代码中有一个语法错误,应该是 var obj={fn1:function (){console.log(this)},fn2:()=>{console.log(this)}}。在执行 obj.fn1() 时,this 指向 obj 对象;而在执行 obj.fn2() 时,this 指向 obj 对象所在的作用域(一般情况下指的是全局对象)。
var obj={} for(var i=1;i<=20;i++){ obj['o'+1]=i; } console.log(obj);v
这段代码的作用是创建一个空对象 `obj`,然后循环从1到20,将每个数字作为值存储在 `obj` 对象中的属性 `'o' + i` 中。最后,使用 `console.log(obj)` 打印出 `obj` 对象的内容。
然而,这段代码有一个错误。在循环中,应该使用 `i` 而不是 `1` 来构造属性名。修正后的代码如下:
```javascript
var obj = {};
for (var i = 1; i <= 20; i++) {
obj['o' + i] = i;
}
console.log(obj);
```
这样会得到一个包含20个属性的对象,属性名为 `'o1'` 到 `'o20'`,对应的属性值分别为 1 到 20。
阅读全文