[转]javascript函数定义表达式和函数声明的区别

在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示:

  var test = function(x){

    return x;

  }

  function test(x){

    return x;

  }

  尽管函数定义表达式和函数声明语句包含相同的函数名,并且都创建了新的函数对象,但是这二者却有区别。

  函数声明语句中的函数名是一个变量名,变量指向函数对象。

  函数定义表达式和通过var声明变量一样,其函数被提前到了脚本或函数的顶部,因此它在整个脚本和或函数内都是可见的。这样的话,只有函数变量声明提前了,函数的初始化代码仍然在原来的位置。但是使用函数声明的话,函数名称和函数体均提前了,即脚本中的函数和函数中嵌套的函数都会在当前上下文中其它代码之前声明,也即可以在声明一个函数之前调用它。

  举个例子:

  test(1);

  function test(x){

    console.log(x);

  }

  上述代码能正常执行,结果输出为1;因为对于函数声明语句,函数名称和函数体均提前声明了,可以在声明之前调用它。

 

  test(1);

  var test = function(x){

    console.log(x);

  }

  上述代码不能正常执行,会报错。

  因为对于函数定义表达式,只有函数变量声明提前了,但是函数的初始化代码仍然在原来的位置,也即相当于如下的代码

  var test;   //函数变量声明提前

  test(1);

  var test = function(x){

    console.log(x);

  }

  因此,会报错test不是一个函数的错误。

时间: 2024-10-09 03:02:14

[转]javascript函数定义表达式和函数声明的区别的相关文章

javascript函数定义表达式

函数定义表达式定义一个JavaScript函数.表达式的值是这个新定义的函数.从某种意义上讲,函数定义表达式可称为"函数直接量",毕竟对象初始化表达式也称为"对象直接量".一个典型的函数定义表达式包含关键字function,跟随其后的是一对圆括号,括号内是一个以逗号分割的列表,列表含有0个或多个标识符(参数名),然后再跟随一个由花括号包裹的JavaScript代码段(函数体),例如: //这个函数返回传入参数值的平方 var square = function(x)

以前忽略了的 函数定义表达式【提升】 的小细节

区别函数定义的两种方式: var foo = function() {} //函数定义表达式 function foo() {} //函数声明语句 前者有提升现象,后者没有. 众所周知,javascript在中有 "变量提升"的现象--在变量声明之前使用该变量就会报错:原因是因为js 是从上到下执行,在使用一个还未定义的变量所以就会报错! 同理: foo()var foo = function(){ console.log(1) } => VM3022:1 Uncaught Ty

【编程语言】变量的定义以及与extern声明的区别

变量的定义与声明的区别 首先,变量的定义一定是发生在变量声明(extern)之前,变量的声明可以有多个,但是变量的定义只有一种,变量的声明影响变量的引用和作用域,而变量的定义则只是单方面的创建变量以及初始化赋值等,若变量再定义时没有初始化,则会在文件执行编译的时候随机赋值 1)变量在定义时分配内存空间,同时也可能进行赋初值 2)变量在声明时不会分配内存空间,变量的声明只是声明变量存在,可能引用其他文件中位置的声明变量,其作用是声明变量是在已定义的变量后面进行的 变量分为变量名和变量值 变量名的地

JS函数定义与匿名函数的调用

定义函数的三种方法: 1.关键字法 function fnMethodName(x) { alert(x); } 2.字面量法 var fnMethodName = function (x) { alert(x); } 3.Function()构造函数 var fnMethodName = new Function('x', 'alert(x);') 上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函

JavaScript 函数定义方法

JavaScript 函数定义方法. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } 函数声明后不会立即执行,会在我们需要的时候调用到. function myFunction(a, b) { return a * b; } 分号是用来分隔可执行JavaScript语句. 由于函数声明不是一个可执行语句,所以不以分号结束. 函数表达式 JavaScript 函数可以通过一个表达式定义. 函数表达式可

js函数表达式和函数声明的区别

我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function foo() { // <-- 添加这一行 var a = 3; console.log( a ); // 3 } // <-- 以及这一行 foo(); // <-- 以及这一行 console.log( a ); // 2 虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的

JavaScript新手的第一堂函数课:定义与参数(文末福利)

关注微信公众号[异步图书]每周送书 本文包括以下内容: 理解函数为何如此重要 函数为何是第一类对象 定义函数的方式 参数赋值之谜 在本文这一部分讨论JavaScript基础时,也许你会感到惊讶,我们的第一个论点是函数(function)而非对象(object).当然,第3部分会用大量笔墨解释对象,但归根结底,你要理解一些基本事实,像普通人一样编写代码和像"忍者"一样编写代码的最大差别在于是否把JavaScript作为函数式语言(functional language)来理解.对这一点的

“函数声明”、“函数原型”与“函数定义”辨析

最近在看一本关于C的书,对函数声明和函数定义的定义很是模糊,分不清楚,百度了一下,发现一篇帖子写的很是不错,转载过来: 原文: 对函数的“定义”和“声明”不是一回事.函数的定义是指对函数功能的确立,包括指定函数名,函数值类型.形参及其类型以及函数体等,它是一个完整的.独立 的函数单位.而函数的声明的作用则是把函数的名字,函数类型以及形参的类型.个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否 正确,实参与形参的类型和个数是否一致),它不包括函数体.————谭浩强 ,<C程

JS中函数定义和函数表达式的区别

摘要: (function() {})();和(function(){}());的区别 Javascript中有2个语法都与function关键字有关,分别是: 函数定义:function FunctionName(FormalParameterList) { FunctionBody } 函数表达式:function [FunctionName](FormalParameterList) { FunctionBody } 从语法的定义上看,这两者几乎是一模一样的(唯一的区别是函数表达式可以省略