var num = 100;
var obj = {
num: 200,
inner: {
num: 300,
print: function() {
console.log(this.num)
}
}
};
(obj.inner.print)(); // 300
(obj.inner.print = obj.inner.print)(); // 100
最后一个实在没想明白这里的原理和机制
var num = 100;
var obj = {
num: 200,
inner: {
num: 300,
print: function() {
console.log(this.num)
}
}
};
(obj.inner.print)(); // 300
(obj.inner.print = obj.inner.print)(); // 100
最后一个实在没想明白这里的原理和机制
老哥你的代码确定不报错吗?
var num = 100;
var obj = {
num:200,
inner:{
num:300,
print:function(){
console.log(this.num)
}
}
}
obj.inner.print() // 300
obj.inner.print = obj.inner.print() // 100
去掉括号后执行结果为:
300
300
10 回答11.5k 阅读
4 回答3.4k 阅读✓ 已解决
2 回答3k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
首先,你需要理解两点
第一,表达式代表着一个操作,必须有一个返回值(可以为undefined)。
“=”代表着赋值操作,(obj.inner.print = obj.inner.print)是一个赋值表达式,赋值操作返回值就是赋给的值,也就是
这个函数。
这时候调用
就"近似"等于(“近似”是因为,并不是直接执行下面代码,下面只是方便理解写的伪代码。因为下面那样的代码执行时候,是又声明了一个匿名函数,而实际上,是非方法调用的原来那个print函数)
这时候就需要理解第二点了,js直接函数调用中this指向。
web前端都知道是window,所以是100
说白了,就是考你一个操作符和表达式的概念。这个概念不光js,别的语言也是通用,基本操作表达式都有返回值。
","也是个操作符
这个片段也是个表达式,","操作符返回操作符右值,所以这个表达式返回3

好好补代码基础把。