// 有参函数fun2 function fun2(param) { alert(param); } fun2.apply(null,["我被调用了"])
虽然call,apply可以纯粹的用来调用/执行函数,但它们更多是用来改变函数执行的上下文。 4、new (不推荐使用这种方式哦 ) 复制代码 代码如下: // 无参函数fun1 function fun1() { alert("我被调用了"); } new fun1();
// 有参函数fun2 function fun2(param) { alert(param); } new fun2("我被调用了")
new的本质是用来创建/构造一个类的实例,这里定义的fun1,fun2明显不是一个类(没有this,没有prototype)。但两个函数确实执行了。这是new的副作用。 从以上调用方式上看四种方式执行结果没有区别。但如果函数有返回值的话,用new方式调用时可能会让你有些失望。 复制代码 代码如下: // 有返回值的函数fun function fun() { alert("我被调用了"); return "jack"; } var c = new fun(); alert(c);//[object Object],为什么不是"jack"?
改成这样 复制代码 代码如下: // 有返回值的函数fun function fun() { alert("我被调用了"); return {name:"jack"}; } var c = new fun(); alert(c.name); //jack,又正常返回了