为了账号安全,请及时绑定邮箱和手机立即绑定

js中的变量查找问题

/ 猿问

js中的变量查找问题

小熊熊HELLO 2018-10-07 14:30:24
var name="hello";
var o={
    name:"hi"
}
var sayName =  function () {
    console.log(name)
}
sayName(); //hello
sayName.call(o); //hello
o.sayName=sayName;
o.sayName(); //hello

这段代码,为什么后两个的输出都是hello,不应该是hi吗?

查看完整描述

1 回答

已采纳
?
qq_药药_0

你还是没搞懂,单纯的变量问题;他只会循着函数作用域来展开;

sayName()

你执行这个函数他还是只会寻找自身定义这个变量没有;自身没name;那么找上级函数;他上级根本没有函数;就只有全局去找;找到了

var name="hello";

全局定义了个hello。你要找到对象里面的name可以这么写

var sayName =  function () {
    console.log(this.name)
}

这样返回的就是hi了

查看完整回答
反对 2018-10-07
  • 小熊熊HELLO
    小熊熊HELLO
    soga。。。。原来是方法的作用域链只是和方法有关,和调用他的对象是无关的。。。

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信