博文
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 () {
......
学习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),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
......
深入理解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);
}
......
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......