JavaScript中argument对象的作用和原理究竟是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计926个文字,预计阅读时间需要4分钟。
问题:`var length=10; function fn() { alert(this.length); } var obj={ length: 5, method: function(fn) { arguments[0](); } }; obj.method(fn);` 这段代码中的 `arguments[0]()` 是什么意思?带一对小括号的是什么意思?
解答:在 JavaScript 中,`arguments[0]()` 这段代码有几个关键点需要理解:
1. `arguments[0]`:`arguments` 是一个类数组对象,它包含了函数中所有参数的集合。在函数内部,`arguments` 可以像数组一样使用,但它不是真正的数组,所以不能使用数组的某些方法(如 `map`、`filter` 等)。`arguments[0]` 表示函数的第一个参数。
2. `()`:这表示调用一个函数。在这里,`arguments[0]()` 的意思是调用 `arguments` 对象中的第一个参数所指向的函数。
综合来看,`arguments[0]()` 的意思是:调用函数的第一个参数所指向的函数。
带一对小括号 `()` 的意思是:执行括号内的代码,即调用函数。
这段代码的执行过程如下:
- 定义了一个变量 `length`,它的值为 `10`。- 定义了一个函数 `fn`,该函数弹出一个包含 `this.length` 的警告框。由于 `this` 关键字在 `fn` 函数中没有指定上下文,所以 `this.length` 将会根据函数的调用环境来确定。- 创建了一个对象 `obj`,它包含一个名为 `length` 的属性,其值为 `5`,以及一个名为 `method` 的方法。`method` 方法接收一个参数 `fn`,并调用 `arguments[0]()`,即调用 `fn` 函数。- 调用 `obj.method(fn)`,将 `fn` 函数作为参数传递给 `obj.method` 方法。由于 `method` 方法内部调用了 `fn` 函数,所以会弹出一个包含 `this.length` 的警告框。
需要注意的是,由于 `fn` 函数中的 `this` 没有指定上下文,所以 `this.length` 的值将取决于 `fn` 函数的调用环境。在这个例子中,由于 `fn` 函数是在 `obj.method` 方法内部被调用的,`this` 将指向 `obj` 对象。因此,警告框将显示 `obj.length` 的值,即 `5`。
问题
var length = 10; function fn(){ alert(this.length); } var obj = { length: 5, method: function(fn) { arguments[0]() } } obj.method(fn);//1
这段代码中的arguments[0]()是第一个参数?带一对小括号是什么意思?
理解
我们可以先从最后调用obj.method(fn)开始理解。
1.obj是对象,method()是obj的方法,fn是method()的参数,fn是函数的名,他引用对应的函数。arguments是JavaScript的一个内置对象。
An Array-like object corresponding to the arguments passed to a function.
The arguments object is a local variable available within all functions; arguments as a property of Function can no longer be used. Description:You can refer to a function‘s arguments within the function by using the arguments object. This object contains an entry for each argument passed to the function, the first entry's index starting at 0.
2.arguments是用来取得method(fn)的参数的类数组,在这里也就是fn,即arguments[0]===fn或arguments.0===fn(0就是arguments的一个属性)。所以arguments[0]()就等于fn()。
是不是到这里要开始风中凌乱了,this.length究竟是指向那个对象呢? 可以这样理解:
arguments = { 0: fn, //也就是 functon() {alert(this.length)} 1: 第二个参数, //没有 2: 第三个参数, //没有 ..., length: 1 //只有一个参数 }
最后,这个1就是arguments.length,也就是本函数参数的个数。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计926个文字,预计阅读时间需要4分钟。
问题:`var length=10; function fn() { alert(this.length); } var obj={ length: 5, method: function(fn) { arguments[0](); } }; obj.method(fn);` 这段代码中的 `arguments[0]()` 是什么意思?带一对小括号的是什么意思?
解答:在 JavaScript 中,`arguments[0]()` 这段代码有几个关键点需要理解:
1. `arguments[0]`:`arguments` 是一个类数组对象,它包含了函数中所有参数的集合。在函数内部,`arguments` 可以像数组一样使用,但它不是真正的数组,所以不能使用数组的某些方法(如 `map`、`filter` 等)。`arguments[0]` 表示函数的第一个参数。
2. `()`:这表示调用一个函数。在这里,`arguments[0]()` 的意思是调用 `arguments` 对象中的第一个参数所指向的函数。
综合来看,`arguments[0]()` 的意思是:调用函数的第一个参数所指向的函数。
带一对小括号 `()` 的意思是:执行括号内的代码,即调用函数。
这段代码的执行过程如下:
- 定义了一个变量 `length`,它的值为 `10`。- 定义了一个函数 `fn`,该函数弹出一个包含 `this.length` 的警告框。由于 `this` 关键字在 `fn` 函数中没有指定上下文,所以 `this.length` 将会根据函数的调用环境来确定。- 创建了一个对象 `obj`,它包含一个名为 `length` 的属性,其值为 `5`,以及一个名为 `method` 的方法。`method` 方法接收一个参数 `fn`,并调用 `arguments[0]()`,即调用 `fn` 函数。- 调用 `obj.method(fn)`,将 `fn` 函数作为参数传递给 `obj.method` 方法。由于 `method` 方法内部调用了 `fn` 函数,所以会弹出一个包含 `this.length` 的警告框。
需要注意的是,由于 `fn` 函数中的 `this` 没有指定上下文,所以 `this.length` 的值将取决于 `fn` 函数的调用环境。在这个例子中,由于 `fn` 函数是在 `obj.method` 方法内部被调用的,`this` 将指向 `obj` 对象。因此,警告框将显示 `obj.length` 的值,即 `5`。
问题
var length = 10; function fn(){ alert(this.length); } var obj = { length: 5, method: function(fn) { arguments[0]() } } obj.method(fn);//1
这段代码中的arguments[0]()是第一个参数?带一对小括号是什么意思?
理解
我们可以先从最后调用obj.method(fn)开始理解。
1.obj是对象,method()是obj的方法,fn是method()的参数,fn是函数的名,他引用对应的函数。arguments是JavaScript的一个内置对象。
An Array-like object corresponding to the arguments passed to a function.
The arguments object is a local variable available within all functions; arguments as a property of Function can no longer be used. Description:You can refer to a function‘s arguments within the function by using the arguments object. This object contains an entry for each argument passed to the function, the first entry's index starting at 0.
2.arguments是用来取得method(fn)的参数的类数组,在这里也就是fn,即arguments[0]===fn或arguments.0===fn(0就是arguments的一个属性)。所以arguments[0]()就等于fn()。
是不是到这里要开始风中凌乱了,this.length究竟是指向那个对象呢? 可以这样理解:
arguments = { 0: fn, //也就是 functon() {alert(this.length)} 1: 第二个参数, //没有 2: 第三个参数, //没有 ..., length: 1 //只有一个参数 }
最后,这个1就是arguments.length,也就是本函数参数的个数。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

