首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这些Javascript函数声明的差异

在JavaScript中,有两种主要的函数声明方式:函数声明(Function Declaration)和函数表达式(Function Expression)。

  1. 函数声明(Function Declaration)

函数声明是使用function关键字,后面跟函数名称和括号中的参数列表,然后是一个大括号包围的函数体。函数声明会提升(hoisting),即在执行代码之前先读取函数声明,因此可以在声明之前调用函数。

代码语言:javascript
复制
function myFunction(a, b) {
  return a + b;
}

console.log(myFunction(1, 2)); // 输出 3
  1. 函数表达式(Function Expression)

函数表达式是将一个函数赋值给一个变量。函数表达式不会提升,因此必须先声明再调用。

代码语言:javascript
复制
const myFunction = function(a, b) {
  return a + b;
};

console.log(myFunction(1, 2)); // 输出 3

函数表达式有多种写法,例如匿名函数表达式、命名函数表达式等。

代码语言:javascript
复制
// 匿名函数表达式
const myFunction = function(a, b) {
  return a + b;
};

// 命名函数表达式
const myFunction = function add(a, b) {
  return a + b;
};

总结:

  • 函数声明是使用function关键字和函数名,函数体由大括号包围。
  • 函数表达式是将函数赋值给变量,可以是匿名函数或命名函数。
  • 函数声明会提升,函数表达式不会提升。
  • 函数声明和函数表达式都可以用来定义函数并调用它们。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript函数 ① ( 函数引入 | 函数声明 | 函数调用 )

一、JavaScript 函数 1、函数引入 JavaScript 代码编写时 , 会遇到 定义 大量相同或相似代码 场景 , 这些代码可能需要重复使用 , 这种情况下就需要 将 这些代码 定义在 函数..., 使代码更加清晰和易于维护 ; 函数 目的 就是 重复使用代码 ; 使用函数 就是 声明函数 和 调用函数 ; 2、函数声明JavaScript 中 , 使用 function 关键字 声明函数...; 函数定义语法格式 : // 声明 JavaScript 函数 function functionName(parameter1, parameter2, ...) { // 函数体:执行代码块...是 传递给函数 形式参数列表 , 这些 形式参数 在 函数体代码中 可与作为局部变量使用 ; 代码示例 : // 声明函数 function hello(name) {...是传递给函数 实参列表 , 该 实参列表 与 函数定义 形参列表一一对应 , 这些实际参数值值将替换函数定义中形式参数 , 并在函数执行时 作为 函数 局部变量 使用 ; 4、代码示例 - 函数声明调用

9310

JavaScript: 函数式编程 - 声明函数

了解JavaScript函数式编程目录 0-了解 JavaScript 函数式编程 - 什么是纯函数 1-了解 JavaScript 函数式编程 - 柯里化 2-了解 JavaScript 函数式编程...- 代码组合优势 3-了解 JavaScript 函数式编程 - 声明函数 4-了解 JavaScript 函数式编程 - 类型签名 声明声明式代码 什么是声明式,我们将不再指示计算机如何工作...而且,map 函数如何进行迭代,返回数组如何收集,都有很大自由度。它指明是做什么,不是怎么做。因此,它是正儿八经声明式代码。...所以我们需要纯函数声明函数来隔离这种无用错误。 为什么使用声明式方式函数函数? 在纯函数中,我们总是能保证我们输出。 低复杂度,我们只需要考虑是他是做什么,而不是在乎过程怎么完成。...下篇文章 4-了解 JavaScript 函数式编程 - 类型签名

1.3K30

JavaScript-变量函数声明提升

(3)因此,建议始终在作用域顶部声明变量(全局代码顶部和函数代码顶部),这可以清楚知道哪些变量是函数作用域(本地),哪些变量在作用域链上解决。...三、函数声明 3.1 概念 函数声明通过关键词 function 来声明,关键词后面紧跟函数名称,名称后面有一个小括号(()),括号里面放置了函数参数(para1,......四、函数表达式 区分函数声明函数表达式规则:函数声明总是以function关键词开始,如果不是,那它就是一个函数表达式。...(1)函数表达式不是以function关键词开始(一般出现在代码中间部分) ? 五、函数声明提升 ? 六、函数声明优先级较高 (1)函数声明比变量声明优先级高。 ?...(2)如果两者同名,并且同时存在,后被提升函数声明会覆盖先被提升变量声明。 ? 参考文章 详解Javascript 函数声明函数表达式区别

1.1K20

【说站】javascript如何声明函数

javascript如何声明函数 1、使用函数结构函数函数是在函数结构函数帮助下创建。 技术上,这种方法比使用函数表达式语法和函数声明语句法声明函数方法效率低。...匿名函数是自我调用,这意味着自动调用。这种行为也称为即时调用函数表达式(IIFE)。 3、函数声明函数内部声明变量是该函数局部变量。 这种方法是JavaScript中常用老派方法。...在函数内部,参数将作为局部变量。 同样,函数内部声明变量是该函数局部变量。局部变量只能在该函数内访问,因此同名变量可以轻松地用于不同函数。...以上就是javascript声明函数方法,大家可以根据不同使用情况进行选择。...更多Javascript学习指路:Javascript 推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。

74430

Javascript函数声明函数表达式

Javascript定义函数有两种类型 函数声明 // 函数声明 function wscat(type){ return type==="wscat"; }...但实际上,Javascript函数一个“陷阱”就体现在Javascript两种类型函数定义上。...JavaScript 解释器中存在一种变量声明被提升机制,也就是说函数声明会被提升到作用域最前面,即使写代码时候是写在最后面,也还是会被提升至最前面。...出现这个陷阱本质原因体现在这两种类型在函数提升和运行时机(解析时/运行时)上差异。...当然我们最后要给一个总结:Javascript函数声明函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。

53010

Javascript基础:函数声明和变量声明提升之注意点函数优先

新手同学们肯定会疑惑,为什么没有输出2020呢,因为2020赋值那条语句是表达式而不是函数声明,因此不会被提升。...console.log( 2019 ); } foo( ); foo = function( ){ console.log(2020); } 虽然这个道理看起来好像是没什么用一样,但是有的时候有些人写代码出了一些奇怪...if(f){ function foo(){console.log('a');} }else{ function foo(){console.log('b');} } 这个案例代码,俺在最新版本google...上面测试已经跑不通了,俺看是《你不知道Javascript(上卷)》,看来这个问题以及被Javascript修复了哈~ 书中提到了Javascript未来版本可能会发生改变。...但是这个问题想告诉大家函数声明会被提升,另外后面的函数声明还会覆盖前面的函数声明。 例如下面的代码就会输出3,因为中间是表达式不会提升,而第三个函数声明覆盖了第一个,因此输出3。

65130

Javascript函数声明函数表达式

Javascript有很多有趣用法,在Google Code Search里能找到不少,举一个例子: ~function() { alert("hello, world.")...; }(); 试一下就知道这段代码意思就是声明一个函数,然后立刻执行,因为Javascript变量作用域是基于函数,所以这样可以避免变量污染,但这里位运算符『~』乍一看让人摸不到头脑...在阐述为什么之前,让我们先来明确Javascript两个概念:函数声明函数表达式: 先来看看什么样函数声明: function() { alert("hello, world...,Javascript不允许在函数声明后面直接使用小括号,而函数表达式则没有这个限制,通过在函数声明前面加上一个『~』操作符,就可以让语法解析器把后面看成是函数表达式,同样,在函数声明前面加上『!...使用位操作符“~”方法显得有点奇技淫巧,其实把函数声明用小括号套起来更易读: (function() { alert("hello, world."); })(); </script

53220

javascript函数声明函数表达式

javascript中,我们经常要声明函数,或者使用函数表达式,今天我们就来说说这两者区别。 解析器在执行代码时候,对函数声明函数表达式并不是一致。...解析器会优化读取函数声明,这是为了使其他代码在使用此函数之前可以使用,函数表达式则不然,必须到函数表达式执行到所在代码区域才会被解释执行。...我们来看两个例子: 1.函数声明: console.log(action(10,20)) function action(num1,num2){ } 这段代码我们一直都知道,是可以通过吧,这是因为解析器会优化读取函数...javascript引擎在第一次会声明函数并将他们放在源代码顶部,所以即使函数声明在调用后面,也能完成执行。 如果使用函数表达式,这样调用就会报错。...在执行到函数所在语句之前,解析器根本找不到action这个函数,这就是函数声明函数表达式区别。

46410

为什么我坚持使用 JavaScript 函数声明

时光溯回到上世纪 90 年代晚期,在初次接触 JavaScript 时,老师教我们使用函数声明写下Hello World,它看上去是这样······ function helloWorld() {...即使是免费 Babel(JavaScript编译器),也无法阻挡我对函数声明喜爱。...JavaScript 中所有声明都是提升(hoist)和绑定,但初始化方式各自不同。...换言之,JavaScript 提升了sayHelloTo声明——先阅读,再置其于顶层,然后创建空间来储存其值——但在执行之前不会声明sayHelloTo。...所以不论何时进行函数声明,代码开始执行时,语法都是符合其作用域。 ? Professor JavaScript,out! 刚说问题让代码不得不从低级开始,一步一步往上走。

1.1K80

JavaScript(js)函数声明函数表达式区别

JavaScript中,函数是经常用到,在实际开发时候,我想很多人都没有太在意函数声明函数表达式区别,但是呢,这种细节东西对于学好js是非常重要。...函数声明函数表达式用代码写出来是这样: //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){...首先,在函数调用方面,看下面的代码 say(); //函数声明 function say(){ console.log("函数声明") } 这样执行结果是什么呢?...答案是打印出“函数声明”,那你看下面的代码 say1(); //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function...一起来看看,首先我们先说第一种,函数声明调用,函数声明调用这个其实不用讲你就知道,函数声明了嘛,哪里都可以调用(function会有预解析,预解析之后函数就存在了,所以那里都能调用它了)。

79630

前端入门12-JavaScript语法之函数声明正文-函数

正文-函数JavaScript 里用 function 声明就是函数函数本质上也是一个对象,不同函数调用方式有着不同用途,下面就来讲讲函数。...函数定义有三种方式: 函数声明式 add(1,2); //由于函数声明被提前了,不会出错 function add(x, y) { //函数体 } add 是函数名,由于 JavaScript...函数定义表达式 var add = function (x, y) { //函数体 } 这种方式其实是定义了匿名函数,然后将函数对象赋值给 add 变量,JavaScript 声明提前处理只将...add 变量声明提前,赋值操作仍在原位置,因此这种方式声明函数调用需要在声明之后才不会报错。...call() 和 apply() 这两个方法在函数调用一小节中介绍过了,因为在 JavaScript函数动态,任意函数都可以作为任意对象方法被调用,即使这个函数声明在其他对象中。

52020

javascript函数声明函数表达式浅析

在ECMAScript中,有两个最常用创建函数对象方法,即使用函数表达式或者使用函数声明。...——译 }  函数声明函数表达式异同 下面简单说说。声明和表达式行为存在着十分微妙而又十分重要差别。 首先,函数声明会在任何表达式被解析和求值之前先行被解析和求值。...声明总是在作用域开始时先行解析; 表达式在遇到时候才运算。 函数声明还有另外一个重要特点,即通过条件语句控制函数声明行为并未标准化,因此不同环境下可能会得到不同结果。...那么,使用函数声明实际规则到底是什么? ...函数声明只能出现在“程序代码”中,意味着只能在其它函数体中或者全局空间;它们定义不能不能赋值给一个变量或属性,或者作为一个参数传递出现在函数调用中;下面的例子是函数声明允许用法,foo(),bar

90690

函数(三)(函数声明

函数声明 C语言函数调用要求是先定义后使用,就是要求被调用函数定义在主调函数之前。 如果在程序中自定义函数时,需要将被调函数定义在主调函数后面,就需要函数调用之前加上函数原型声明。...如果在函数调用之前既无函数定义,也无函数声明,编译时会出错。 函数原型声明一般形式: 类型说明符 函数名(形式参数声明列表); 例:定义计算圆面积函数,在主函数中输入半径并计算面积。...return ; } double circle(double radius) { return PI * radius * radius; } 函数声明函数名后面的圆括号中可以只给出形参类型...,省略形参名称。...例如本例中第5行函数声明可以写成如下形式: double circle(double); 如果在源程序文件开头部分,所有函数定义前面进行函数声明,则该源程序文件中所有的函数都可以调用被声明函数

62210

JavaScript立即执行函数解释分析(2)—函数表达式与函数声明区别

说明 上次我们聊了聊表达式与语句区别,这次我们说说函数表达式与函数声明,上次虽然提到过这两点,但是并没有很详细讲,这次要专门聊聊了!...函数表达式(函数定义表达式) 函数定义表达式定义一个JavaScript函数。表达式值就是这个新定义函数。...js程序在正式执行之前,会将所有 var 声明变量和 function 声明函数,预读到所在作用域顶部,var 声明只是将声明提前,赋值仍然保留在原位置,function 声明,会将函数名称和函数体都提前...("b"); } a=function(){ console.log("a"); } a(); 所以,最后结果就是 a 了,如果你对声明提前还是不太理解可以看这里 谈谈 JavaScript...,一方面是声明提前区别,虽然都提前,但函数表达式只是将声明提前,赋值仍然保留在原位置,函数声明,会将函数名称和函数体都提前,另一方面就是调用区别,函数表达式后面可以直接写()来调用函数,而函数声明不可以

54730

更优雅编写JavaScript,使用这些函数秒变大神

JavaScript中更简便数组处理函数.map(),.reduce(),.filter() 如果你刚接触JavaScript可能你还没有听说过.map(),.reduce(),.filter()。...在国内很多开发项目都是需要考虑IE8兼容,为了兼容很多JavaScript好用方法和技巧都被埋没了。但是我发现近几年开始,很多开发项目已经完全抛弃了IE这个魔鬼了。...---- 结合使用 .map(),.reduce(),.filter() 既然我们刚刚学到三个函数都是可以用于数组,并且.map()和.filter()都是返回数组。那我们就可以串联起来使用。...代码原来可以写那么优雅么?!想不到吧? 其实我们只需要使用.reduce()就可以得到我们目标结果了,以上例子做为教学例子,所以使用了3个我们学到函数。...当然这个时候有一些前端就会说“我只是个小小前端,后端给我处理吧”。但是,这个接口其实是一个通用接口,就是获取这些员工资料,是在多个地方使用

50920

javascript两种声明函数方式一次深入解析

声明函数方式 javascript有两种声明函数方式,一个是函数表达式定义函数,也就是我们说匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME...function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */}; 区别一 方式一声明方式是先声明后使用...方式二声明方式可以先调用,后声明 /*方式一: *先声明后使用 */ //f1();这里调用就会出错 var f1 = function () { alert("var...即函数声明过程在整个程序执行之前预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。...alert (‘2’);主要原因是JavaScript 函数声明“提前”行为,简而言之,就是Javascript允许我们在变量和函数声明之前使用它们,而第二个定义覆盖了第一种定义。

49420

JavaScript—ES6变量声明

ES6系列–变量声明 ES6系列 ES6系列–变量解构赋值 let声明变量,const声明常量 var 和 let 、const区别 作用域 let 和 const 是块级作用域,仅在整个大括号内可见...var 只有全局作用域和函数作用域 为什么需要块级作用域?...SyntaxError: Identifier 'a' has already been declared 4、全局对象属性 let、const声明全局变量不属于全局对象属性 let a = 0...console.log(this.a) //undefiend 暂时性死区 只要块级作用域内存在let命令,它所声明变量就“绑定”(binding)这个区域,不再受外部影响 var tmp =...上面代码中,常量foo指向一个冻结对象,所以添加新属性不起作用,严格模式时还会报错。 除了将对象本身冻结,对象属性也应该冻结。下面是一个将对象彻底冻结函数

46720

谈谈 JavaScript 声明提前(hoisting)

,js程序在正式执行之前,会将所有var 声明变量和function声明函数,预读到所在作用域顶部,但是对var 声明只是将声明提前,赋值仍然保留在原位置,function 声明,会将函数名称和函数体都提前...console.log(a); //100 }; fn(); console.log(a); //报引用错误 注意2: 函数声明提前不同于 var 变量声明提前,使用函数声明语句,函数名称和函数体均会被提前...,也就是说可以在声明一个JavaScript函数之前调用它。...函数声明和变量声明都会被提升,但是函数会首先提升,然后才是变量。而且使用 var 重复声明变量会被忽略,但后面的函数声明还可以覆盖前面的。...; 这道题也就是再说,如果 window里没有属性a,就声明一个变量a,然后赋值为1,最后弹出一个警告框显示a,当我们把这些概念弄清楚,会发现这道题其实是这样, var a; if (!

62620

Kotlin:02-函数声明

名称自定义,你想叫啥就叫啥 args 该函数参数。如果某个函数有多个参数,使用逗号间隔 : 声明参数类型声明符。...) 这是函数主体,你想让函数实现什么功能就写出对应代码即可 以上就是 函数声明基本格式,以后我们在声明函数时候也需要遵守上面的格式。...二、函数返回值类型 我们在定义一个函数之后,有时候是需要通过函数返回一些数据,那么这些数据会有对应数据类型(具体下一节会有介绍),这就是函数返回值类型。...2、函数有返回值 (1)、显示声明返回值类型 如果某个函数有返回值,那么就需要在函数声明声明其返回值类型,示例代码如下: fun sum(a: Int, b: Int): Int { return...a + b } 在上面的代码中,我们定义了一个 求和函数,接收两个 Int 类型参数,返回值是两个参数和,由于得到和 是 Int 类型数据,所以该函数返回值类型就是Int,这个返回值类型就需要在函数声明

57230
领券