javascript - js对象问题?
怪我咯
怪我咯 2017-04-11 13:01:42
[JavaScript讨论组]

为什么第一次有(),第二次没有呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(8)
黄舟

谢邀。加括号表示执行函数,不加括号那就是一个 function 类型变量而已

迷茫

第一个是执行函数,第二个是把函数赋值到变量上。不一样。

不然后面也不会有func(),执行函数了。

PHPz

谢邀。这题的关键点是this对象的判定,简单的来说this指向的都是调用它的对象,第一次调用的对象是obj,返回的是objname,第二次调用this的是全局对象window,所以返回的是underfined,或者你可以再定义一个全局变量var name ="global" 就可以看到第二次返回的是"global"了(全局变量被当做全局对象的属性),以上。

巴扎黑
obj.get();

此时调用get()方法的是obj这个对象,所以函数内this指向obj,所以this.name为obj.name="a"

var func=obj.get

看清楚了,这里是把obj的方法get屁股后面那截:function(){...}赋值给了func

等价于:

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

这就和obj没关系了,this指向window对象,this.name=window.name=undefined

伊谢尔伦

第一次相当于直接执行了 obj 的 get 方法:打印出 name 属性,这里面的 this 指的就是 obj 本身,所以结果是 a;

第二次相当于是设置,这里面 this 指向的是全局对象 window,window 没有 name 属性,所以结果是 undefined。

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

在 JavaScript 中,this 是指向函数执行时调用函数的对象。第一个是 obj 调用这个函数,第二个没有明确地调用对象,不过这种函数实际上是属于 window 的方法,所以调用者是 window。

伊谢尔伦

推荐看下大叔的深入理解javascript系列,看完就明白啦~

黄舟

加了()表示函数调用
不加()只表示了func是一个函数类型的变量而已

高洛峰

()代表立即执行

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号