1、函数声明
在主代码流中声明为单独的语句的函数
直接在所在的作用域内声明即可,在相同的作用域内,任何地方都可以调用
function sum(a, b) {
return a + b;
}
2、函数表达式
在一个表达式或者另一个语法结构中创建的函数
let sum1 = function (a, b) {
return a + b
}
3、函数表达式与声明函数的区别
(1)javascript引擎会在什么时候创建函数
函数表达式:
是在执行到该行代码的时候,对应的函数才会被创建,不能提前调用。
下面的这个例子,sayHi只能放到函数表达式后面执行。
let sayHi = function (name) {
alert(`Hello, ${name}`)
}
sayHi("Year")
函数声明
一个全局函数声明对整个脚本来说都是可见的 无论它被写在脚本的那个位置。由于javascript内部算法的缘故,首先会在脚本中寻找全局函数声明并创建这些函数,我们可以将其视为初始化阶段,在处理万所有函数声明后,代码才被执行 所以运行时,可以在声明之前就使用这些函数。
下面的这个例子,非严格模式下,sayHello可以放到任意位置执行。
sayHello("Year");
function sayHello(name) {
alert(`hello, ${name}`)
}
(2)函数声明另外的一个特殊的功能是它们的块级作用域
严格模式下,块级作用域内声明的函数只能在块级作用域下使用,全局作用域内不能访问
"use strict"
let age = prompt("what is your age?", 18);
if (age < 18) {
function welcome() {
alert("Hello !");
}
} else {
function welcome() {
alert('Hi !');
}
welcome()
}
welcome() // 全局作用域下使用 报错
此时如果需要调用welcome函数就需要使用函数表达式
let yearAge1 = prompt("what is your age, Fish", 18);
let welcome;
if(yearAge> 18) {
welcome= function () {
alert("Hello")
}
}else {
welcome= function() {
alert("Hi, year")
}
}
welcome()
4、什么时候选择函数声明与函数表达式
(1)如果我们需要全局声明一个函数时,首先可以考虑函数声明语法, 它能够为组织代码提供更多的灵活性,因为我们可以在函数声明前调用这些函数
(2)仅当函数声明不适合对应的任务时,可以使用函数表达式