Javascript 立即函数调用
Javascript immediate function invocation
我正在试验不同的 javascript 函数调用,我尝试了 运行 下面的代码。这里是 fiddle link https://jsfiddle.net/7de5vfpj/
var app = function () {
var ans = {
power: alert("power"),
wow: alert("wow")
}
return ans;
}();
从 fiddle 它同时提醒 "power" 和 "wow",而我只是希望它提醒 "wow"。为什么会这样?
您实际上是在立即调用这两个警报。要获得预期的行为,您需要将函数引用传递给方法,而不是已经调用的函数(您的 IIFE 很好,问题的原因是您的方法声明):
var app = function () {
var ans = {
power: function() { alert("power") },
wow: function() { alert("wow") }
}
return ans;
}();
您也可以选择利用 Function.prototype.bind
return 函数引用这一事实:
var app = function () {
var ans = {
power: alert.bind(this, 'power'),
wow: alert.bind(this, 'wow')
}
return ans;
}();
app.power();
这里是that jsfiddle。
在您的原始代码中,如果您打开控制台,您会看到 Uncaught TypeError: app.power is not a function
。那是因为 window.alert
returns undefined
和 window.alert
函数已经被调用...因此,它们 return undefined
,当你尝试调用 app.power()
,您正在尝试调用该方法的 return 值 ...显然 undefined
不是函数,正如错误在语义上所说的那样。
原文Fiddle:
var app = function () {
var ans = {
power: alert("power"),
wow: alert("wow")
}
return ans;
}();
app.power();
警报方法是由于对象文字语法而触发的。在 fiddle 底部调用 ans.power();
导致抛出以下异常。
Uncaught TypeError: app.power is not a function
警报方法没有任何 return 值。这导致 power
和 wow
属性具有 undefined
值。
这也导致 fiddle 底部的调用抛出上面的异常。
您正在将警报分配给一个变量,并在初始化时触发警报。
var x = alert("aa"); //this will trigger alert on initialization.
可能更好的解决方案是同时使用 power
和 wow
函数。
var app = function () {
var ans = {
power: function(){alert("power")},
wow: function(){alert("wow")}
}
return ans;
}();
希望对您有所帮助。
我创造了一些东西,也许可以做你想做的事。
function app() {
this.power = function(){
alert('power');
}
this.wow = function(){
alert('wow');
}
};
var app = new app;
app.power()
app.wow()
您可以使用 app.power() 调用 power 方法,或 app.wow() 调用 wow 方法。要创建新方法,只需遵循 using
的格式
this.methodName = function(){
//code you want to execute
}
//to call that method, outside of the function,
//and after you set a variable to new app, call this
app.methodName();
我正在试验不同的 javascript 函数调用,我尝试了 运行 下面的代码。这里是 fiddle link https://jsfiddle.net/7de5vfpj/
var app = function () {
var ans = {
power: alert("power"),
wow: alert("wow")
}
return ans;
}();
从 fiddle 它同时提醒 "power" 和 "wow",而我只是希望它提醒 "wow"。为什么会这样?
您实际上是在立即调用这两个警报。要获得预期的行为,您需要将函数引用传递给方法,而不是已经调用的函数(您的 IIFE 很好,问题的原因是您的方法声明):
var app = function () {
var ans = {
power: function() { alert("power") },
wow: function() { alert("wow") }
}
return ans;
}();
您也可以选择利用 Function.prototype.bind
return 函数引用这一事实:
var app = function () {
var ans = {
power: alert.bind(this, 'power'),
wow: alert.bind(this, 'wow')
}
return ans;
}();
app.power();
这里是that jsfiddle。
在您的原始代码中,如果您打开控制台,您会看到 Uncaught TypeError: app.power is not a function
。那是因为 window.alert
returns undefined
和 window.alert
函数已经被调用...因此,它们 return undefined
,当你尝试调用 app.power()
,您正在尝试调用该方法的 return 值 ...显然 undefined
不是函数,正如错误在语义上所说的那样。
原文Fiddle:
var app = function () {
var ans = {
power: alert("power"),
wow: alert("wow")
}
return ans;
}();
app.power();
警报方法是由于对象文字语法而触发的。在 fiddle 底部调用 ans.power();
导致抛出以下异常。
Uncaught TypeError: app.power is not a function
警报方法没有任何 return 值。这导致 power
和 wow
属性具有 undefined
值。
这也导致 fiddle 底部的调用抛出上面的异常。
您正在将警报分配给一个变量,并在初始化时触发警报。
var x = alert("aa"); //this will trigger alert on initialization.
可能更好的解决方案是同时使用 power
和 wow
函数。
var app = function () {
var ans = {
power: function(){alert("power")},
wow: function(){alert("wow")}
}
return ans;
}();
希望对您有所帮助。
我创造了一些东西,也许可以做你想做的事。
function app() {
this.power = function(){
alert('power');
}
this.wow = function(){
alert('wow');
}
};
var app = new app;
app.power()
app.wow()
您可以使用 app.power() 调用 power 方法,或 app.wow() 调用 wow 方法。要创建新方法,只需遵循 using
的格式this.methodName = function(){
//code you want to execute
}
//to call that method, outside of the function,
//and after you set a variable to new app, call this
app.methodName();