JavaScript函数声明与表达式小结

函数声明与表达式
函数是JavaScript中的一等对象,这意味着可以把函数像其它值一样传递。
一个常见的用法是把匿名函数作为回调函数传递对异步函数中。
函数声明
function foo() {}
上面的方法会在执行前被 解析(hoisted),因此它存在于当前上下文的任意一个地方,
即使在函数定义体的上面被调用也是对的。
foo(); // 正常运行,因为foo在代码运行前已经被创建
function foo() {}
函数赋值表达式
var foo = function() {};
这个例子把一个匿名的函数赋值给变量 foo。
foo; // 'undefined'
foo(); // 出错:TypeError
var foo = function() {};
由于 var 定义了一个声明语句,对变量 foo 的解析是在代码运行之前,因此 foo 变量在代码运行时已经被定义过了。
但是由于赋值语句只在运行时执行,因此在相应代码执行之前, foo 的值缺省为 undefined。
命名函数的赋值表达式
另外一个特殊的情况是将命名函数赋值给一个变量。
var foo = function bar() {
    bar(); // 正常运行
}
bar(); // 出错:ReferenceError
bar 函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo;
然而在 bar 内部依然可见。这是由于 JavaScript 的 命名处理 所致,函数名在函数内总是可见的。

时间: 2024-12-28 18:37:31

JavaScript函数声明与表达式小结的相关文章

javascript 函数声明在if语句里面

问题描述 javascript 函数声明在if语句里面 var x = 1; if(function f(){},x=f){ } console.log(x); 为什么在执行if语句的时候,会报f is not defined的错误. 解决方案 [觉得对弱类型语言还钻了下牛角尖] 条件判断里不应该进行有作用域的定义, 发现只能定义全局变量 if(i=3,x=i) //good if(var i=3,x=i) //bad 你的例子,我给你改一下就正确了,只是发现一点规律,具体原因,我不确定 var

Javascript函数声明与函数表达式的区别

在定义函数时,我们一般使用下面这两种方法: Js中的函数声明是指下面的形式:       function functionName(){    }    这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName = function(){  }    可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行的,那他们有什么差别呢? 使用函数声明定义: function  sum (a, b) {     retu

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

还是一样,先上代码: 复制代码 代码如下: <script> var f = function g() { return 1; }; if (false) { f = function g(){ return 2; }; } alert(g()); // 2 </script> 把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果. 这里输出2 是在ie6里面的效果,如果在chorme会出现g没有定义. 这也算是JScript的bug吧. 在这里很明显,这里的只是定义

JavaScript函数的一些注意要点小结及js匿名函数_javascript技巧

下面给大家介绍javascript函数 函数的基本语法是: function functionName(arg0,arg1,...,argN) { statements } 下面是个示例: function str(name,age){ document.write("hello my name is " + name + ". and i am " + age + " years old."); } str(" oliver"

JavaScript函数声明和函数表达式

JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法:  代码如下 复制代码 function func1(-){-} var func2=function(-){-}; var func3=function func4(-){-}; var func5=new Function(); 另外还有一种自执行函数表达式,主要用于创建一个新的作用域,在

Javascript中函数声明与函数表达式的区别

Js中的函数声明是指下面的形式: function functionName(){ } 这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName = function(){ } 可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行的,那他们有什么差别呢? 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的.对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同

JavaScript中的函数声明和函数表达式区别浅析

 这篇文章主要介绍了JavaScript中的函数声明和函数表达式区别浅析,本文总结的浅显易懂,非常好的一篇技术文章,需要的朋友可以参考下     记得在面试腾讯实习生的时候,面试官问了我这样一道问题. 代码如下: //下述两种声明方式有什么不同 function foo(){}; var bar = function foo(){};   当初只知道两种声明方式一个是函数声明一个是函数表达式,具体有什么不同没能说得很好.最近正好看到这方面的书籍,就想好好总结一番. 在ECMAScript中,有两

详解JavaScript中的函数声明和函数表达式_java

JavaScript 中需要创建函数的话,有两种方法:函数声明.函数表达式,各自写法如下: // 方法一:函数声明 function foo() {} // 方法二:函数表达式 var foo = function () {}; 另外还有一种自执行函数表达式,主要用于创建一个新的作用域,在此作用域内声明的变量不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,且立即自动执行: (function () { // var x = ... })(); 此种自执行函数表达式归类于以上两种方法

JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同_javascript技巧

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