|
|
这里没有输出5,也没有输出10,反而输出了1,有趣。这里arguments是javascript的一个内置对象(可以参见mdn:arguments - JavaScript**),是一个类数组(就是长的比较像数组,但是欠缺一些数组的方法,可以用slice.call转换,具体参见上面的链接),其存储的是函数的参数。也就是说,这里arguments[0]指代的就是你method函数的第一个参数:fn,所以arguments0的意思就是:fn()。
不过这里有个疑问,为何这里没有输出5呢?我method里面用this,不应该指向obj么,至少也会输出10呀,这个1是闹哪样?
|
|
所以这里alert出来的结果是1。
如果要输出5应该咋写呢?直接 method: fn 就行了。
我们可以看看最后这个调用:obj.method(fn).
其中,obj是对象,method是obj的方法,fn是method的参数,fn是函数的名–引用对应的函数。arguments是取得当前method函数的参数数组,arguments[0]就是参数fn。
加个括号其实是函数调用。
这个obj.method(fn) 在runtime就是fn(),即调用alert(this.length)。比较操蛋的是现在有三个length,第一是global的length=10,其次是obj的this.length=5,还有一个是arguments数组本身的length属性,其值等于1——只有一个参数传给obj.method方法。这个例子讲的是JavaScript中this引用的,这个的this是caller的this,这里引用是arguments数组的length。所以这个例子的结果是:
alert(arguments.length); = alert(1)
本文结束,感谢阅读。
本文作者:melody0z
本文链接:https://melodyvoid/JavaScript/arguments.html
欢迎转载,转载请注明文本链接