看到一块新大陆(new Function)

224 阅读1分钟

new Function

  • 一种创建函数的方法。它很少被使用,但有些时候只能选择它。

直接上语法

    const funBody = `
        return {[key]: name}
    `
    
    // 以下几种方式都可以
    // const fn =  new Function('key, name', funBody);
    // const fn =  new Function('key , name', funBody);
    const fn =  new Function('key', 'name', funBody);
    
    fn('name', '炒青菜'); // { name: '炒青菜'}
  • 感觉挺有意思的,我们在编程时候不知道funBody(函数体, 从服务器返回),但是在执行的过程中知道了,就需要使用 new Funciton
    • 但是使用时候有需要注意下
      • 通过函数体无法访问外部变量, 使用时候需要显示的传入
      const fn1 = function() {
          const myName = '炒青菜'
          const funBody = `
              return myName
          `
          
          const fn2 =  new Function(funBody);
          const fn3 = new Function('myName', funBody);
          
          fn2() // myName is not defined  实际上这里读的是全局作用域下的myName
          fn3(myName) // 炒青菜
      }