你函数没有返回值吧。加了()就是执行这个匿名函数了,而不是将匿名函数复制给initPage变量而且要注意变量的作用域
解决方案 »
- 播放音乐文件的问题,高手请赐教!!!
- 高手请帮忙看看!!!谢谢了!!!!!!!
- 请赐教!
- 大家好,我想问一下现在网上流行一种技术,就象我们上新浪时弹出一大副图片,但只持续了几秒钟后就自动消失了,这是用javascrip 作的吧,
- 如何去掉设置默认页弹出的对话框,立即给分!
- 求教如何在关闭网页(点击右上角差号)前扑捉到此事件,并进行一些处理。
- 窗口属性的控制。
- 怎么在网页中应用windows录音机控件
- 错误:Microsoft OLE DB Provider for ODBC Drivers (0x80040E37)
- js 数组的小问题
- js传值(对象类型数组)给后台方法?
- 经常用火狐调试js的哥们,问个问题
var initPage = function () {
alert("11");
};
$(function(){
$("#btnRefreash").click(function () {
initPage();
});
});
感觉该这么写呢。。
返回值是函数体的东西啊,
var initPage = function () {
//methodBody
};
这个是把整个函数的引用赋值给initPage ,
加个() , 就变成了将函数返回值赋值给initPage ?
感觉好诡异...作用域应该没问题吧,都在一个作用域内.
var initPage = function () {
//methodBody
}();加上了(),function部分已经执行了,除非function返回的是另一个函数,即initPage是一个函数,才能initPage()执行。
你methodBody的代码是怎么样的?
逻辑都变了啊!
我原来是初始一次 , btnRefreash按了也执行一次
除非再加个 initPage(); 调用,这当然就没问题了...
代码运行情况我已经知道了,
不加() 就是定义一个匿名函数,然后赋值给initpage这个变量,
加了后就是执行匿名函数,并将函数返回的结果(void)赋值给initpage这个变量,所以是undefined
就是不太理解为什么这样.
感觉这个语法糖已经破坏了语法的统一性了.
你可以这样理解:
js中的函数其实是一种数据,与数值,数组和字符串是一样的。一个函数后面的()实际上是执行函数的运算符,和+-*/没有多少区别。
这两个好理解吧
1)var a = 123;
var r = a * 2;2)var a = function () { alert(123); };
var r = a();
那么1)可以改成var r = 123 * 2;同样的2)也可以改成var r = function () { alert(123); }();
只是js是弱类型,所以initpage既能用函数赋值,又能用函数的返回值赋值,
但两者是不同的行为.