🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## eval 把一个字符串变为JS表达式执行, 例如: ``` eval("12+23+34+45") ->114 eval("23,34,45,56") ->56 ``` ### eval 和 node中的runInThisContext ``` let a = 'ahhh'; eval('console.log(a)'); //ahhh let vm = require('vm'); vm.runInThisContext(`console.log(a)`); //沙箱 完全隔离 读不到外面的a //ReferenceError: a is not defined ``` ## 括号表达式 括号表达式可以执行单个或多个表达式 返回最后一个表达式的值,多个表达式之间需要用逗号“,”分隔开 ``` (1,2+3,4+5,6)//代码会被一次执行,最后将6作为返回值 ``` ### 括号表达式与函数 ``` function fn1(){console.log(1)}; function fn2(){console.log(2)}; // ;(function(){ // console.log() // })(); ;(fn1,fn2)(); //->2 ->只有fn2执行了 ->(x1,x2,x3...)括号表达式,一个括号中出现多项内容,中间用","隔开,但是我们最后获取到的结果只有最后一项 function fn1(){console.log(this)}; function fn2(){console.log(this)}; var obj = {name:'ahhh',fn:fn2}; (fn2,obj.fn)(); //->执行的是obj.fn,但是执行的时候里面的this变为了window而不是obj //因为括号表达式中obj.fn相当于是把fn2的值copy一份放进来 (obj.fn)(); //->但如果只有一项,this还是obj ```