当javaScript从入门到提高前需要注意的细节:函数部分(4)
}
}
fun1(4)();
fun1(10)();
你是不是认为执行的结果又min也有max在不同的浏览器中,错了,这次他们都很正常的预期。说明return将后面的非匿名函数表达式有效的让编译器作为表达式而不是声明来看待了。
那么非匿名的函数表达式有什么问题嘛?
我们来看一个demo
[html]
var fun1 = function fun2() {
alert("OK");
}
fun1(); // OK
fun2(); //在IE中弹出OK,在Chrome和FireFox中错误
既然只有IE支持,那我们在IE上继续点实现,学习一个种语言,千万不要被书上的条条框框限制,最好是多多多多的天马行空的乱想点不正经的代码出来,有静态语言经验的人都会被下面的代码的执行结果吓死
[html]
var fun1 = function fun2() {
alert("OK");
}
fun1 = function() {
alert("fun1");
}
fun1(); //fun1
fun2(); //OK
fun1和fun2竟然不是指向同一个对象,或者说内存地址。所以,如果说这个是IE的bug,那么我们幸好Chrome和FireFox不支持非匿名的函数表达式具有实在的意义,上帝保佑,这样我们尽可能的不要写出非匿名的函数表达式就可以避免很多问题了。不过也有说法是说,非匿名的函数表达式在递归的时候有用,以下代码告诉我们匿名函数表达式也一样可以递归的哦,亲。
一个匿名函数使用递归的阶乘demo
[html]
alert((function(x) {
if (x > 1) {
return x * arguments.callee(--x);
}
else {
return 1;
}
} (10)));// 3628800
以上说了一大堆,就是为了要告诉你一个关键事实:函数表达式只能在代码执行阶段创建而且不存在于变量对象中,换个更通俗的说法是:函数表达式只有当执行到的时候,其才存在,否则是当他不存在的。
我们用匿名函数除了是return和内部赋值外,还常常用来做一次性执行的自执行函数。以下就匿名函数自执行的demo
[html]
(function() {
alert("OK");
})();
(function() {
alert("OK");
} ());
上面的两种写法在所有浏览器中都可以执行,随你喜欢什么方式,只要固定就好,有些书推荐使用方式2,我不清楚为什么,反正对我来说很随意的使用了。
匿名函数也可以传参
[html]
(function(x) {
x--;
alert(x);
} (10));
匿名函数往往非常好用,我们可以把匿名函数作为一个参数来传递,有时候,我们传递的的确是函数的本身,有时候我们传递的是函数的结果,如果是函数的结果,那么函数的自调用就非常cool了
先看看传递函数,以下的代码会生成一组li元素,并且背景色是依据前一个li的背景色加一点点,这样看上去就是一个渐变区域。当然,真的画渐变区域不必这样处理。
[html]
$(
function() {
$(":button").click(
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- Gridx入门
- 发表评论
-
- 最新评论 更多>>