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

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

[html]
alert(fun3 === fun4); 

上面的结果是无论如何都超过了初学者的想法:在IE中式false,在Chrome或FireFox中是错误
对于Chrome或FireFox原因比较明显,也就是说,fun4被赋值后就立即抛弃了

[html]
alert(typeof fun3); //function 
alert(typeof fun4); //undefined 

在IE中
[html]
alert(typeof fun3); //function 
alert(typeof fun4); //function 
这一点是IE的错误,但是从结果可以得知:命名函数表达式的名字在外部作用域是无效的。哪怕如下,你执行下fun3还是不行的www.2cto.com
[html]
var fun3 = function fun4() {//声明一个变量指向一个非匿名的函数表达式 
 

 
fun3(); 
 
alert(typeof fun3); //function 
alert(typeof fun4); //undefined 

虽然IE是有错误,但是IE透露了一个信息,非匿名的函数表达式由于函数有名称,被优先的分配了。看看我们最上面的函数定义声明的案例中的fun4
这么一来,如果你一不小心的话

[html]
function fun1() { 
    alert("A"); 

 
var count = 2; 
 
var input = 10; 
switch (input) { 
    case 5: 
        function fun1() { 
            alert(5); 
        } 
        break; 
    case 10: 
        if (count % 2 == 0) { 
            function fun1() { 
                alert("odd"); 
            } 
        } 
        else { 
            function fun1() { 
                alert("even"); 
            } 
        } 

 
fun1(); 

这些代码的执行会不会出乎你的意料呢?注意上面的代码在不同的浏览器中得到的是不同的。再看看下面的代码
[html]
var fun1 = function(x) { 
    if (x < 10) { 
        return function fun2() { 
            alert("min"); 
        } 
    } 
    return function fun2() { 
        alert("max"); 

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

推荐热点

  • 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