用户:
蓝矮爱乐查看:2 回复:7 评论:2 创建时间:2022-06-11T21:31:39
在神岛的某些内部脚本定义函数里面
你故意不加括号调用这个函数,却想看看这个函数执行的原理
例如:
//world.say方法可以将文本在地图的世界频道里发送出来,让所有玩家看见
//我就很好奇他的原理啊
~> world.say
<~ (message) => { this._say(0,0,message); }
像上面的代码,this关键词用在箭头函数里面是无效的,很正常。但,this的_say方法是未定义(undefined),怎么调用的?!
其实,你是无法查看this._say的属性,但你可以做出这种样子,怎么做出来的?
因为这个变量只能用在函数里面,看到变量名后往函数外调用,就会报错……
只能用在函数里面的变量叫局部变量,局部变量往函数外调用,就会报错
在函数内定义后,所有作用域都可以使用的叫全局变量
this._say就是用了局部变量导致外部无法调用的方法
这个语法长什么样?很复杂?要用多少关键词?
nonono,别想多了,其实很简单的
例:
var variable = (()=>{
function PowerOfItself(number){//局部函数,函数也同样是变量
return number**number
};
return function variable(a){ return PowerOfItself(a)};//返回一个函数调用,
//这个函数里面返回值的名字就是一个未定义的名字
})()//将variable这个变量赋值于被调用的函数,在这个函数里面创建的变量都是局部变量
这样,就能……
别人: ~> variable
<~ function variable(a){ return PowerOfItself(a) }
别人:什么?PowerOfItself的原理又是什么?
于是……
别人: ~> PowerOfItself
<~ "ReferenceError: PowerOfItself is not defined"
别人:这个函数肯定会报错!
我:不信你试试?!
于是……
别人: ~> variable(5)
<~ 3125
别人:我惊呆了,函数调用后一个未定义的名字调用居然不会报错?!
我:这回你信了吧,我用了闭包方法,让你心服口服
别人:我真的心服口服,闭包怎么用?求解!
我:请看我论坛的最新帖子!
别人:哦,这就去看
不喜勿喷()()有什么错误的请指点()()
不要吞排版啊
芜湖咸鱼补充:箭头函数(比如()=>{}这种)的this指向父级,而function函数的this是单独的
比如
function sth(){
this.x = 2;
const fun1 = ()=>{
console.log(this.x); // 这里的this和外部的this一致,因此可以获取到this.x为2
}
const fun2 = function(){
console.log(this.x); // function函数的this是独立的,和外部没有关系,所以this.x为undefined
}
fun1();
fun2();
}
sth();点赞0
评论