扫码关注官方订阅号
为什么第一次有(),第二次没有呢?
走同样的路,发现不同的人生
谢邀。加括号表示执行函数,不加括号那就是一个 function 类型变量而已。
function
第一个是执行函数,第二个是把函数赋值到变量上。不一样。
不然后面也不会有func(),执行函数了。
func()
谢邀。这题的关键点是this对象的判定,简单的来说this指向的都是调用它的对象,第一次调用的对象是obj,返回的是obj的name,第二次调用this的是全局对象window,所以返回的是underfined,或者你可以再定义一个全局变量var name ="global" 就可以看到第二次返回的是"global"了(全局变量被当做全局对象的属性),以上。
obj
name
this
window
underfined
var name ="global"
obj.get();
此时调用get()方法的是obj这个对象,所以函数内this指向obj,所以this.name为obj.name="a"
var func=obj.get
等价于:
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是一个函数类型的变量而已
()代表立即执行
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
谢邀。加括号表示执行函数,不加括号那就是一个
function类型变量而已。第一个是执行函数,第二个是把函数赋值到变量上。不一样。
不然后面也不会有
func(),执行函数了。谢邀。这题的关键点是this对象的判定,简单的来说this指向的都是调用它的对象,第一次调用的对象是
obj,返回的是obj的name,第二次调用this的是全局对象window,所以返回的是underfined,或者你可以再定义一个全局变量var name ="global"就可以看到第二次返回的是"global"了(全局变量被当做全局对象的属性),以上。此时调用get()方法的是obj这个对象,所以函数内this指向obj,所以this.name为obj.name="a"
看清楚了,这里是把obj的方法get屁股后面那截:function(){...}赋值给了func
等价于:
这就和obj没关系了,this指向window对象,this.name=window.name=undefined
第一次相当于直接执行了 obj 的 get 方法:打印出 name 属性,这里面的 this 指的就是 obj 本身,所以结果是 a;
第二次相当于是设置,这里面 this 指向的是全局对象 window,window 没有 name 属性,所以结果是 undefined。
在 JavaScript 中,this 是指向函数执行时调用函数的对象。第一个是 obj 调用这个函数,第二个没有明确地调用对象,不过这种函数实际上是属于 window 的方法,所以调用者是 window。
推荐看下大叔的深入理解javascript系列,看完就明白啦~
加了()表示函数调用
不加()只表示了func是一个函数类型的变量而已
()代表立即执行