首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript调用方法

Javascript调用方法
EN

Stack Overflow用户
提问于 2015-06-02 16:54:49
回答 2查看 48关注 0票数 2

为什么下面的代码会输出1?

代码语言:javascript
运行
复制
function func(){
  alert(this)
}
var i = 1;
func.call(i);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-02 17:05:13

定义

Function.prototype.call(这,arg1,arg2,.);

因此,当调用func.call时,传入的第一个参数被绑定到this变量。因此,在函数func中,任何this变量都将替换为第一个参数,即1

将进一步播放

您可以将更多的参数扩展到func,并使用进一步的参数进行调用,并查看发生了什么:

代码语言:javascript
运行
复制
function func(a,b){
    alert(this + a*b);
}

func.call(1,2,3);

回想一下定义,第一个参数或func.call引用functhis变量。所以你最终会跑

代码语言:javascript
运行
复制
alert( 1 + 2*3 );

**参考文献:** 对象/函数/调用

**更上一层楼**

function.prototype.call还有另一个亲密的兄弟姐妹,即function.prototype.apply。这两个函数的第一个参数引用this变量。唯一的区别是function.prototype.apply在数组中接受此类函数的参数。

所以而不是

代码语言:javascript
运行
复制
func.call(1,2,3);

你可以这样称呼它

代码语言:javascript
运行
复制
func.apply(1,[2,3]);

玩得开心点!

票数 2
EN

Stack Overflow用户

发布于 2015-06-02 16:55:53

因为call的第一个参数是函数this值,所以语法是

代码语言:javascript
运行
复制
function.call(thisArg[, arg1[, arg2[, ...]]])

正如在MDN上所指出的

这意味着传递给call的第一个参数将是被调用函数中的this

代码语言:javascript
运行
复制
function func(){
  alert(this)
}

func.call("test"); // alerts "test"

要传递参数,您需要传递一个this值,然后剩下的参数将是传递给函数的参数。

代码语言:javascript
运行
复制
function func(arg1, arg2, arg3){
    alert(this); // alerts "this_value"
    alert(arg2); // alerts "kitty"
}

func.call("this_value", "hello", "kitty", "cat");

apply的工作方式是相同的,但是使用了一个参数数组

代码语言:javascript
运行
复制
func.apply("this_value", ["hello", "kitty", "cat"]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30602096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档