欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js 创建函数的方式

程序员文章站 2024-03-26 11:19:59
...

js定义函数的方式有以下几种,下面简要介绍这几种方式以及它们各自的特点:

1.函数声明方式

function fun(x = 1){
    return x;
}

这是最常见定义函数的方式,其特点式是:存在函数声明提升,会提升到当前作用域顶层

2.函数表达式

let fun = function(x = 1){
    return x;
}

// var fun = function(x = 1){
//    return x;
//}

这是比较常用的定义函数的方式,将匿名函数赋值给一个变量,其特点是:如果使用let变量声明,和普通的变量一样,不存在变量提升,如果使用var变量声明,会提升到当前作用域顶层。

等价的变形形式:

let fun2 = (x = 1) => x

// var fun2 = (x = 1) => x

3.立即执行函数表达式

let fun = function(x = 1){
    return x;
}()

// var fun = function(x = 1){
//     return x;
// }()

console.log(fun) // 1

将立即执行函数赋值给fun变量,其特点是:fun实际上不是一个函数引用,而是函数执行后的返回值;和函数表达式一样,如果使用let变量声明,和普通的变量一样,不存在变量提升,如果使用var变量声明,该变量会提升到当前作用域顶层。

等价的变行形式:

let fun = ((x = 1) => x)()

// var fun = ((x = 1) => x)()

4.Function构造函数

let fun = new Function('x = 1', 'return x')

// var fun4 = new Function('x = 1', 'return x')

Function构造函数一般很少被用到,它可以动态创建新的函数,只接受字符串类型的参数,分别用来表示函数参数以及函数体。相当于下面函数表达式形式:

let fun = function(x = 1){
    return x;
}

但是需要注意,Function构造函数创建的函数作用域只存在于全局作用域,在一个函数里面用Function构造函数定义的函数取不到该函数的局部变量,这和闭包函数不一样。

var x = 3
function fun(){
    var x = 2 
    return new Function('return x') // 获取不了局部变量
}

console.log(fun()()) // 3