JavaScript函数奇异性

JavaScript函数奇异性,javascript,arrays,Javascript,Arrays,在JavaScript中,声明如下变量时: let something = arr.push() something.call(arr, valueToPush); 为什么数组的行为类似于调用push方法,如“arr.push()”?arr.push()在将值推入数组时返回数组的新长度 为什么数组的行为类似于调用push方法,如'arr.push()' 因为这正是代码的作用。它调用arr.push(),然后将其返回值(数组的新长度)分配给某物,与x=foo()调用foo并将其返回值分配给x的

在JavaScript中,声明如下变量时:

let something = arr.push()
something.call(arr, valueToPush);
为什么数组的行为类似于调用push方法,如“arr.push()”?

arr.push()
在将值推入数组时返回数组的新长度

为什么数组的行为类似于调用push方法,如'arr.push()'

因为这正是代码的作用。它调用
arr.push()
,然后将其返回值(数组的新长度)分配给
某物
,与
x=foo()
调用
foo
并将其返回值分配给
x
的方式完全相同

如果要将函数本身分配给
某物
,则不会在末尾使用
()

let something = arr.push;
您可以稍后按如下方式推送到阵列:

let something = arr.push()
something.call(arr, valueToPush);
调用的
.call(arr,
部分在那里,因此调用期间
引用数组
arr
引用,因为
push
使用
。如果要避免这种情况,可以使用
bind
arr
绑定到函数:

let something = arr.push.bind(arr);
那么这就行了:

something(valueToPush);