javascript函数详解
在javascript中,函数可看作是一种数据,可以赋值给变量,可以嵌套在另一个函数中。
var fun = function(){ ("平底斜");}
function fun(){ var n=10; function son(){ n++; } son(); (n);}fun(); //11fun(); //11
我们把上面第二段代码稍微修改下:
var n=10;function fun(){ function son(){ n++; } son(); (n);}fun(); //11fun(); //12
看出差别了吗,如果理解不了代码执行结果,请看上一篇博文,关于javascript作用域和作用域链的讲解。
上面这段代码中变量n是全局变量,随时可能被重新赋值,而无需通过fun函数的调用。为了让变量n不受污染,或者说是减少全局变量的`污染,我们需要把n放到函数中作为局部变量。
function fun(){ var n=10; function son(){ n++; (n); } son();}fun(); //11fun(); //11
如果我们可以在全局中直接调用son函数,那么便可以达成想要的效果。son函数现在是作为局部变量存在,要想在全局中访问,一般有两种方法:
一种是赋值给全局变量
var a;function fun(){ var n=10; a = function son(){ n++; (n); }}fun(); //son()a(); //11a(); //12
另一种是使用return返回值
function fun(){ var n=10; return function son(){ n++; (n); }}var a=fun();a(); //11a(); //12
上面的son()函数就是闭包,某种意义上所有函数都可以看作闭包。闭包就是可以访问外层函数作用域的变量的函数。
var a;function fun(){ var n=10; a = function son(){ n++; (n); } return a();}fun(); //11a(); //12a(); //13fun(); //11a(); //12a(); //13
还是上面那段代码,我们稍微修改下,再看看执行结果,这是因为每次执行fun()函数时都会初始化变量n。
闭包的好处是减少全局变量,避免全局污染,可以将局部变量保存在内存中。但这既是优点又是缺点,一段代码中如果闭包过多,有可能造成内存泄露。由于闭包中局部变量不会被垃圾回收机制回收,所以需要手动赋值为null(关于内存泄露,后期单独开专题)
-
JavaScript经典效果集锦
些很实用且必用的小脚本代码:脚本1:进入主页以后自动播放声音脚本2:进入主页后自动最大话,省的去在自己单击了To(0,0)zeTo(lWidth,lHeight)脚本3:显示现在时间的脚本enow脚本4:显示最后修改时间的.脚本e(Modified)脚本5:设为首页,加为收藏,加入频道,启动outlook...
-
浅析JavaScript基本类型与引用类型
两种类型:ECMAScript变量包含两种不同类型的值:基本类型值、引用类型值;基本类型值:指的是保存在栈内存中的简单数据段;引用类型值:指的是那些保存在堆内存中的`对象,意思是,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象;两种访问方...
-
SQL语句类型的标准模式
1、查询语句:主要是由select关键字完成2、事务控制语句:主要由commit、rollback和savepoint三个关键字完成3、DML(数据操作语言)语句:主要由、update和三个关键字完成4、DDL(数据定义语言)语句:主要由create、alter、drop和truncate四个关键字完成5、DCL(数据控制...
-
javascript包装对象的用法
js对象是一种复合值:它是属性或已命名值得集合。参考以下代码:vars="helloworld";varlen=th;在该例子中,s是字符串,而字符串不是对象,但为何会有属性呢?其实只要引用了字符串s的属性,js就会将字符串通过调用newString(s)的方式转换为对象,该对象继承了字符串的方法,并被...