【每日一题】- 2019-11-18 - 以下代码输出什么?
Closed this issue · 1 comments
azl397985856 commented
plain text:
var length = 10;
function fn () {
console.log(this.length);
}
var obj = {
length: 5,
method: function (fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);
var obj = {
num:8,
inner: {
num: 6,
print: function () {
console.log(this.num);
}
}
}
num = 888;
obj.inner.print();
var fn = obj.inner.print;
fn();
(obj.inner.print)();
(obj.inner.print = obj.inner.print)();
HEternally commented
题1:输出 10 2;
解1:函数fn
为引用数据类型,故传入method
方法中的fn其实是指向外部函数fn的地址;
输出2是因为此时调用的是数组的length
属性,返回数组长度;
题2: 6 888 6 888
解2: 前两个应该都知道,就讲下后两个吧
首页要知道,圆括号的运算符优先级是大于函数调用的
所以(obj.inner.print)()
先运行圆括号内的,而print
方法是属于引用数据类型,即等价于obj.inner.print()
输出6;
(obj.inner.print = obj.inner.print)()
先运行(obj.inner.print = obj.inner.print)
返回值是print函数
,然后执行函数,此时this
指向window