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

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

        } 
        break; 
    default: 
        function fun1() { 
            alert("default"); 
        } 
        break; 

令人恼怒的是,在chrome和IE下执行的是我们前面的推断,function在所有执行代码前先编译,且后面的function会覆盖前面的function定义结果是
[html]
fun1(); //default 

而FireFox把if中的语句作为执行快,运行时才编译,所以他的结果是
[html]
fun1(); //5 
为了解决这个问题,你需要吧动态分配的函数以函数的表达式来执行,避免编译器对函数还没有执行到就已经分配了,比如

[html]
var input = 5; 
switch (input) { 
    case 10: 
        fun1 = function() { 
            alert(10); 
        } 
        break; 
    case 5: 
        fun1 = function() { 
            alert(5); 
        } 
        break; 
    default: 
        fun1 = function() { 
            alert("default"); 
        } 
        break; 

说到函数的表达式,那什么是函数的表达式呢?简单的说,在右边的都是函数的表达式
[html]
var fun1 = function() {//函数表达式 
 

 
var fun1 = function fun2() {//函数表达式 
 

 
var obj = { 
    Do: function() {//函数表达式 
 
    } 

 
new function() {//函数表达式 
 

 
function fun3() { 
    return function() { //函数表达式 
 
    } 

还有两种就是在()内和【】内,原谅我为了看的清楚了些,用了中文的【】,具体看下代码就ok了

[html]
(function() { }); 
[function() { } ]; 

函数表达式和一般的表达式的值一样,都是执行到的时候才编译,不过有一个例外,就是非匿名的函数表达式
[html]
var fun3 = function fun4() {//声明一个变量指向一个非匿名的函数表达式 
 

上面的代码如果你没有特定的含义,求你最好不要这么写,因为会出现你想不到的情况

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

推荐热点

  • 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