美文网首页
new Function

new Function

作者: 静_summer | 来源:发表于2019-11-09 10:16 被阅读0次
  • 1、eval中的代码执行时的作用域为当前作用域。它可以访问到函数中的局部变量。
    *2、new Function中的代码执行时的作用域为全局作用域,不论它的在哪个地方调用的。所以它根本无法访问函数内的局部变量。

new Function

  • 使用

let fn = new Function('a', 'b', 'return a + b')
fn()
// 前面都是参数,后面是函数体

  • 构建模版语法
// 实现一个js模版引擎
// with 作用域 with(obj) {访问obj内的变量}\
// new Function () {} 返回一个函数
let str = `
   <%if(user){%>
       hello <%=user.name%>
   <%}else{%>
       hello world
   <%}%>
   <ul>
   <%for(let i = 0; i < total; i++) {%>
       <li><%=i%></li>
   <%}%>
   </ul>
`
let options = {user: {name: 'xxx'},  total: 5}
function render (str, options) {
   let head = 'let tpl = ``; \n with(obj) { \n tpl += `'
   str = str.replace(/<%=([\s\S]+?)%>/g, function() {
       return '${' + arguments[1] + '}'
   })
   str = str.replace(/<%([\s\S]+?)%>/g, function() {
       return '` \n' + arguments[1] + 'tpl+=`'
   })
   let tail = "`} \n return tpl;"
   let html = head + str + tail;
   let fn = new Function('obj', html)
   return fn(options);
   // console.log(fn(options));
}
render(str, options)

相关文章

网友评论

      本文标题:new Function

      本文链接:https://www.haomeiwen.com/subject/kmemvctx.html