• 理解jQuery的两对小括号()()


    转载:http://zhuxue-feng.iteye.com/blog/184859

    如果大家看jquery的sourcecode就知道一开始就有两对小括号,

    是什么意思呢! 真的是比较困惑, 这么神奇的代码,什么意思啊?

    我们先看看jQuery一开始是怎么写的:

    (function(){

    // jquery 代码

    })();

    它是由什么组成呢? 有一个匿名函数(函数没有名字),

    此匿名函数被一对小括号包裹着,这对小括号右边还有一对小括号.

    我们再看常用一般函数定义方式.

    //函数定义

    function func1(){

    alert("hello,world");

    }

    //调用函数

    func1();

    那么这两句话目的很明显就是要弹出一个"helloworld"的对话框,

    那么我们可不可以合并成一句话, 也同样能达到这样的效果

    当然是可以的.

    (function (){

    alert("hello,world"

    ); })();

    函数名称func1都去掉了, 在函数外面加了一对小括号.

    这和jquery是一样的啊! 可以看出最后面一对小括号语义就是"调用此匿名函数",

    那么包裹在匿名函数外面的一对小括号可以去掉吗?

    变成如下的样子

    function (){

    alert("hello,world");

    }();

    要回答这个问题,先看看javascript对表达式的评估.

    dd= aa+ cc*bb javascript会先评估cc*bb,

    然后才会评估aa+,这是因为地球人都知道的事情,

    乘运算(*)符优先级高于加(+) 同样如果去掉这对小括号的话,

    我们可以假想一下其表达式的评估过程,

    javascript会先评估最后面小括号,而不是先评估匿名函数了,

    那么最后面的小括号是什么语义呢! 仅当作一般运算符去处理,

    并不是"此处存在函数调用"的这样一个语义,

    因为在这之前并不知道有匿名函数存在(还没有评估呢),

    所以在匿名函数外面加上一对小括号的话,javascript对其评估的顺序就变了,

    所以答案很明显,不可以去掉匿名函数外面的一对小括号,否则其评估就会失败,

    导致语法错误. 看到这里是不是豁然开朗了,呵呵! 

  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/nyth/p/2669164.html
Copyright © 2020-2023  润新知