Skip to content

ES6 函数新增扩展

name 属性

返回该函数的函数名

js
var f = function () {}

// ES5
f.name // ""

// ES6
f.name // "f"

如果将一个具名函数赋值给一个变量,则 name 属性都返回这个具名函数原本的名字

js
const bar = function baz() {}
bar.name // "baz"

Function 构造函数返回的函数实例,name 属性的值为 anonymous

js
new Function().name // "anonymous"

bind 返回的函数,name 属性值会加上 bound 前缀

js
function foo() {}
foo
  .bind({})
  .name(
    // "bound foo"

    function () {}
  )
  .bind({}).name // "bound "

作用域

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域

等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的

下面例子中,y=x 会形成一个单独作用域,x 没有被定义,所以指向全局变量 x

js
let x = 1

function f(y = x) {
  // 等同于 let y = x
  let x = 2
  console.log(y)
}

f() // 1