博文

js函数的几种写法 闭包概要(2013-01-26 15:58:00)

摘要: 最常见的: Js代码 Js代码 function foo() {  alert('hi, js');  }  foo();  function foo() { alert('hi, js'); } foo(); 用匿名函数: Js代码 Js代码 var foo = function () {  alert('hi, js');  }  foo();  var foo = function () { alert('hi, js'); } foo(); 改装一下,给调用的foo()加个括号: Js代码 Js代码 var foo = function () {  alert('hi, js');  }  (foo)();  var foo = function () { alert('hi, js'); } (foo)(); 干脆,连foo的定义也省掉------把foo赋值语句的等号右边的东东、直接替换掉刚才括起来的foo: Js代码 Js代码 (function () {  alert('hi, js');  })();  ......

阅读全文(3471) | 评论:1

学习Javascript闭包(Closure)(2013-01-26 15:06:00)

摘要: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! function f1(){ n=999; } f1(); alert(n); // 999 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。 那就是在函数的内部,再定义一个函数。 function f1(){ var n=999; function f2(){ alert(n); // 999 } } 在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的......

阅读全文(2661) | 评论:1

深入理解JavaScript的变量作用域(2012-11-17 10:16:00)

摘要: 在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的。 JavaScript没有块级作用域。 函数中声明的变量在整个函数中都有定义。 1、JavaScript的作用域链 首先看下下面这段代码: view plaincopy to clipboardprint? <script type="text/javascript">       var rain = 1;       function rainman(){           var man = 2;           function inner(){               var innerVar = 4;               alert(rain);           }        ......

阅读全文(2852) | 评论:1

JavaScript 的函数也是变量(2012-11-17 10:06:00)

摘要: JavaScript 的函数也是变量,这是 JavaScript 与众多其它编程语言一个较大的不同之处。虽然它可能会使 JavaScript 的初学者有一点困难,但也允许你做一些在其它语言中不能做却着实非常酷的事情。 我说函数是变量,意思是函数将与数组、数字、字符串和其它对象一样被同等对待。这意味着你可以更加灵活地做一些事情。 你可以将函数定义和重定义为局部变量: var myFunc; if (Math.random() <0.5) {     myFunc = function() {         alert('heads');     }; } else {     myFunc = function() {         alert('tails');     }; } myFunc(); // alerts "heads" or "tails" depending on random value 你也可以把函数作为参数传给其它函数,这对编写回调函数非常有用: function do_something(callback_function) {     alert('hello');     if (callback_function) {         callback_function();     } } var my_callback = function() {     alert('goodbye'); }; do_something(my_callback); // alerts "hello" and then "goodbye" 你还可以将函数作为函数的返回值: function get_multiplier(factor) {  ......

阅读全文(2340) | 评论:1