最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

javascript函数声明与函数表达式的区别介绍_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 21:14:16
文档

javascript函数声明与函数表达式的区别介绍_javascript技巧

javascript函数声明与函数表达式的区别介绍_javascript技巧:还是一样,先上代码: 代码如下: var f = function g() { return 1; }; if (false) { f = function g(){ return 2; }; } alert(g()); // 2 把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果。 这里输出2 是在ie6里面的效果,如
推荐度:
导读javascript函数声明与函数表达式的区别介绍_javascript技巧:还是一样,先上代码: 代码如下: var f = function g() { return 1; }; if (false) { f = function g(){ return 2; }; } alert(g()); // 2 把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果。 这里输出2 是在ie6里面的效果,如


还是一样,先上代码:
代码如下:
输出2 是在ie6里面的效果,如果在chorme会出现g没有定义。

这也算是JScript的bug吧。

在这里很明显,这里的只是定义了g的函数表达式而已。包括在if的条件语句中,也只是定义了函数表达式,没有去声明函数。

那么这样直接访问肯定是会出错的。

那么对于何为声明,何为函数表达式呢?

在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:
函数声明:
  function 函数名称 (参数:可选){ 函数体 }
  函数表达式:
  function 函数名称(可选)(参数:可选){ 函数体 }

所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式。

你可能会想到,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。

文档

javascript函数声明与函数表达式的区别介绍_javascript技巧

javascript函数声明与函数表达式的区别介绍_javascript技巧:还是一样,先上代码: 代码如下: var f = function g() { return 1; }; if (false) { f = function g(){ return 2; }; } alert(g()); // 2 把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果。 这里输出2 是在ie6里面的效果,如
推荐度:
标签: 有什么 js 的区别
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top