JavaScript中匿名函数,函数直接量和闭包(转)
原文出处: http://www.dnew.cn/post/196.htm
先看下下面几种写法
1.function f(x){return x*x;};f(x);
2.(function(x){return x*x;})(x);
3.(function(x){return x*x;}(x));
第一种我们应该都很熟悉了,这是我们经常使用的写法。第二第三种都是匿名函数的写法。
--------------------------------------------------------------------------------
第二种
可以这样理解:
•var f=function(x) {return x*x;};f()
那我们不通过f这个变量来引用函数就是
•function(){}()
然而这样肯定是错误的就像
•var f=1+2;
•f=f*0;
与
•var f=1+2*0;
结果不同一样。
要得到正确结果只能:
•f=(1+2)*0;
也就是要明确的标识出程序块,即:
•(function(){})()
肯你有疑问:括号“()”到底是不是起到了标识代码块的作用?
我们可以用JavaScript的内置函数检测一下!
举一个最简单的例子:
•alert(4)
这段代码会弹出提示内容是“4”
改成这样
•(alert)(4)
可以看到执行的效果和上一段代码一样。
这种形式的函数执行也被很多JavaScript框架所采用。
--------------------------------------------------------------------------------
第三种,如果你用过jsvm框架的话就会发现里面的代码使用了这种形式。
那如何解释第三种情况呢?
为了弄明白浏览器是如何理解这样的写法的,我们可以利用一下Mozilla Firefox的错误控制台功能。
在代码中插入一段错误代码,代码段如下:
•(function(s){s+s}(1)).splice();
打开Mozilla Firefox的错误控制台,可以看到有如下的错误提示
错误: (function (s) {})(1) has no properties
源文件:file:///C:/Documents…….html
行:18
可以认为,浏览器对于
•(function(s){s+s}(1))
这样的代码按照
•(function (s) {s+s})(1)
来解析的。
相关文档:
第九章
Building and Deploying High-Performance JavaScript Applications
创建并部署高性能JavaScript应用程序
According to a 2007 study by Yahoo!'s Exceptional Performance team, 40%–60% of Yahoo!'s users have an empty cache experience, and about 20% of all page views are done ......
The jLayout JavaScript library provides layout algorithms for laying out components. A component is an abstraction; it can be implemented in many ways, for example as items in a HTML5 Canvas drawing or as HTML elements. The jLayout library allows you to focus on drawing the individual components i ......
1. Javascript Debug Toolkit介绍
JSDT(Javascript Debug Toolkit)是一个用于javascript调试的eclipse
插件,用于调试javascript。JSDT可以跨浏览器调试,支持在IE,Firefox,Safari,Chrome等主流浏览器中调试
javascript。JSDT支持设置断点,单步调试等调试工具的基本特性。
2. 如何安装
JSDT是基于eclipse3.2+,jdk1.5+ ......
本文简要介绍JavaScript中confirm,alert,prompt的用法,希望大家学习过程中能得到一些启发。
window.confirm 参数就只有一个。显示提示框的信息。按确定,返回true;按取消返回false。
< SCRIPT> var bln = window.confirm("确定吗?"); alert(bln) < /SCRIPT> window.alert参数,只有 ......