首页  > 计算机 >

好吧,好久没聊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不会被作为结束符号。我干脆把所有的语句都加上;。



4个评论

  1. fmfsaisai:

    挑点刺
    对于不加分号的语句的第一段代码来说
    肯定是出错的

    这样改不会出错但是运行会和预期不一样
    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

    不知道为什么..

  2. fmfsaisai:

    错了,回复的第一段代码要把分号去掉,否则就看不出问题了

  3. surfchen:

    确实要加分号。

    原来\n不一定会作为表达式的结束符。ok\n(会被作为函数运行。第一次知道。

    以前觉得js完全不需要加分号,看来这个想法是错的了。我随手写了那几段代码出来,也没做测试。

  4. 神仙:

    closure 不能 this 了感觉不爽啊

发表评论

  本站文章若无注明,则以署名·非商业用途·保持一致授权
  桂ICP备05004302号 感谢WordPress提供本程序 本模板下载