JavaScript细微差别(函数声明与函数表达式及浏览器差异)
来源:互联网 发布:服装商品数据分析公式 编辑:程序博客网 时间:2024/06/03 18:37
Email:longsu2010 at yeah dot net
我将描述一个JavaScript的古怪问题。幸运的是我之前从未在实际工作中出现问题。我确信function a(){}和var a = function (){}是完全相同的的。
其实我错了,两者有很大的不同,看下面的例子。
你可能说运行结果是“obvious”, “surprise!” and “how come?”,一般来说是正确的,除了Firefox。如果你定义一个命名函数,无论函数定义代码出现在什么位置解析器都会在当前作用域中创建该函数。因此你需要提防这样的代码,同时不要忘记浏览器检测。var a = 5;
if (a == 5) {
var b = function () {
return "obvious";
};
} else {
var b = function () {
return "never";
};
}
if (a == 5) {
function c() {
return "expected";
}
} else {
function c() {
return "surprise!";
}
function d() {
return "how come?";
}
}
alert(b());
alert(c());
alert(d());
另外的一个不同是函数c的name属性值为"c"而b的name属性为"".
c.name == "c";
b.name == "";
译者:
本文阐述了函数声明与函数表达式的区别,同时阐述了在不同浏览器中的差别。这个差别之前我就知道,遇到的机会确实不多。
一般来说JavaScript进入到某一作用域时会优先处理函数声明(不包括函数表达式,函数表达式属于声明变量)、形参和变量声明(不包括赋值,所以在正式赋值前变量的值都是undefined)。
所以在函数声明代码之前调用该函数是没有问题的,如果在函数表达式代码之前调用函数表达式所定义的函数是会报错的,因为在调用的时候函数表达式声明的变量值是undefined。
具体在之前的博客你自认为理解了JavaScript?中有所阐述。
如上所述在Firefox中有所不同,输出结果将是“obvious”, “expected”之后报一个没定义的错。看了结果就知道Firefox是怎么做的了。
相关文章:
你自认为理解了JavaScript?
JavaScript交流贴
JavaScript中的对象(一)消除JavaScript中的if
- JavaScript细微差别(函数声明与函数表达式及浏览器差异)
- javascript中函数声明与函数表达式
- JavaScript: 函数声明与函数表达式
- javascript函数声明与函数表达式
- javaScript中的函数声明提升---函数声明与函数表达式
- javascript中,函数的声明与表达式
- [ javascript ] javascript 函数声明与函数表达式的区别
- JavaScript函数表达式与函数声明的区别
- 【javascript】 声明函数与函数表达式 的区别
- javascript中函数声明与函数表达式的一些认识
- JavaScript中函数声明与函数表达式区别
- JavaScript中函数声明与函数表达式的区别详解
- 函数声明与函数表达式
- 函数声明与函数表达式
- 函数声明与函数表达式
- 函数声明与函数表达式
- 函数声明与函数表达式
- 函数声明与函数表达式
- AudioFlinger的SRC造成的谐波失真测试
- TFIDF算法java实现
- 电力负荷控制终端(Q/GDW 376.1)整体解决方案
- Arrays.sort()对自己定义的类进行排序
- Trie树及其应用
- JavaScript细微差别(函数声明与函数表达式及浏览器差异)
- mxml中嵌入代码时出错
- Spring事件驱动模型详解
- ZTree使用说明
- Java 后台向前台传递中文乱码
- 贪心小结(贪心入门提高15题)
- Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
- Boost的ublas求矩阵逆
- extjs grid数据筛选刷新