好吧,好久没聊js了
本文按署名·非商业用途·保持一致授权作者:
,发表于2009年01月29日02时50分
老话题了,closure。最近PHP5.3的closure改动颇大,PHP核心开发组颇有拍脑子决定的作风。囧,为啥又提到php了。其实就是因为PHP的关系,今天遇到了JS方面类似的东西,就特别又留意了一下。
下面两段代码,分别输出什么?一看就知道结果就证明你理解closure了。
var str='ok';
(function (str) {
document.onmousedown=function (e) {
alert(str);
};
})(str);
str=null;
var str='ok';
document.onmousedown=function (e) {
alert(str);
};
str=null;
以后要早点睡,其实我也很少这么晚睡的。梁大师说过,搞疲劳战是不行的,搞太多了,就不想玩了,不想玩了,就跟不上新技术了,就落后了。
更新:saisai提醒了一下,发现(之前的\n不会被作为结束符号。我干脆把所有的语句都加上;。

2009-01-30 09:26:37
挑点刺
对于不加分号的语句的第一段代码来说
肯定是出错的
这样改不会出错但是运行会和预期不一样
var str=’ok’;
(function (str) {
document.onmousedown=function (e) {
alert(str)
}
}(str))
str=null
只有这样才是对的…
var str=’ok’
void function (str) {
document.onmousedown=function (e) {
alert(str)
}
}(str)
str=null
不知道为什么..
2009-01-30 09:28:22
错了,回复的第一段代码要把分号去掉,否则就看不出问题了
2009-01-30 11:39:26
确实要加分号。
原来\n不一定会作为表达式的结束符。ok\n(会被作为函数运行。第一次知道。
以前觉得js完全不需要加分号,看来这个想法是错的了。我随手写了那几段代码出来,也没做测试。
2009-02-02 15:48:59
closure 不能 this 了感觉不爽啊