当javaScript从入门到提高前需要注意的细节:函数部分(4)

来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:38 点击:

    } 

 
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( 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1