当javaScript从入门到提高前需要注意的细节:函数部分(2)
}
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() {//声明一个变量指向一个非匿名的函数表达式
}
上面的代码如果你没有特定的含义,求你最好不要这么写,因为会出现你想不到的情况
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- Gridx入门
- 发表评论
-
- 最新评论 更多>>