js词法分析2
<script type="text/javascript"> // 函数声明,与函数表达式 /* JS被称为披着C外衣的Lisp语言, lisp是一种强大的函数式语言 函数可以赋值给变量,可以作为参数来传递. */ function t1() { } t2 = function() { } // 这2种方式,效果不同的, // t1是函数声明, 虽然全局内也得到一个t1变量,值是function // 而t2 只是一个赋值过程------值是谁? 值是右侧的表达式的返回结果,即函数 // 就是说 function () {} 在js看来,就和 3*2, 6/3 一样,是个表达式,返回一个结果 // 因此,t1 t2 两种方式在词法分析时,有着本质区别 // 前者 在词法分析阶段,就发挥作用 // 而后者,在运行阶段,才发挥作用 // 知道了函数表达式的概念,再看看一个你以前看不懂的东西 (function(window,undefined) { })(window); 这是jquery的最外层代码 /* (function(window,undefined){}) // 内层表达式,返回值是函数,包在小括号里,当成表达式来执行\ (function(window,undefined){})(window) // 立即调用 // 而内层函数又没有起名字,称为匿名函数, // 这种手法,匿名函数,立即执行,不污染全局. 称为 立即执行匿名函数表达式 */ // 思路: 为什么传window, 而又不会传undefined? /* 答: 传window是为了速度 function() { function() { function () { function () { function () { document.getElementById... // 这个document将会尚作用域层层上找,直到最外层 } } } } } jquery就是为了加快内部查找变局变量的速度, 而直接把window以参数形式传进来 这样 window 就在jquery内部的 AO上 不传undefined是为了安全 因为在IE,FF低版本中 , undefined竟然可以重新赋值 ,如 undefined = 3; 声明undefined局部变量(名字是undefined而已), 同时,又不传参,值自然是undefined 防止了外界对undefined的污染 */ </script>