博文

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 () {  ......

阅读全文(1384) | 评论: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),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 ......

阅读全文(818) | 评论: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);           }        ......

阅读全文(628) | 评论: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......

阅读全文(649) | 评论:1 | 复制链接