You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
functionfunc(a,b,c){console.log(a,b,c);}varfunc1=func.bind(null,'linxin');func('A','B','C');// A B Cfunc1('A','B','C');// linxin A Bfunc1('B','C');// linxin B Cfunc.call(null,'linxin');// linxin undefined undefined
ECMAScript
规范给所有函数都定义了call
与apply
两个方法,他们可应用的地方也很多,call
与apply
作用很相似,唯一的不同点就在于 传参的形式 不一样。不同点
先说语法:
apply
:func.apply(thisArg[, argsArray])
call
:func.apply(thisArg, arg1, arg2, ...)
apply
接受可包含多个参数的 数组 (或array-like
对象),而call
接受的是可包含若干个参数的 参数列表。共同点
apply
( 同call
)调用一个函数,第一个参数指定this
值。thisArg
:this
值,但使用的this
值并不一定是该函数执行时的真正的this
值。null
和undefined
会自动替换成全局对象(浏览器里就是window
),同时值为原始值(数字、字符串、布尔值)的this
指向该原始值的包装对象。apply 和 call 的用法
1.改变
this
指向或去调用别的对象的方法:
2. 直接执行
call
和apply
因为都会立即执行,所以也可以不传递参数,直接调用,只是一般很少人这样用,直接func()
多方便。call
和bind
的区别bind
是 ES5 新增加的一个方法,bind()
方法用于创建一个新的函数(叫做绑定函数),并在调用时,指定this
值,bind()
也接受预设的参数提供给原函数。所以它不会向call
一样直接执行。bind
用法bind()
方法可以使一个函数一开始就拥有一些预设参数,它们的位置从参数的第二项开始,之后这些预设参数会插入到目标函数参数列表的前面,目标函数原有的参数会放在后面:call
把从第二项开始的参数当做实参传递给目标函数,bind
方法把预设参数传递给目标函数,并且预设参数在目标新参数列表的开始位置。参考
The text was updated successfully, but these errors were encountered: