eval() is a global function, javascript uses eval() to interpret and run a string composed of javascript source code
var result = eval('3+2'); console.log(result,typeof result);//5 'number'
Usage
eval() has only one parameter. If the parameter passed in is not a string, it returns this parameter directly. If the parameter is a string, it will compile the string as javascript code. If compilation fails, a syntaxError exception is thrown. If the compilation is successful, execution of this code begins and the value of the last expression or statement in the string is returned. If the last expression or statement has no value, undefined is finally returned. If string throws an exception, this exception will pass the call to eval()
var num = 1; var str = 'test'; console.log(eval(num));//1 console.log(eval(str));//ReferenceError: test is not defined var strLong1 = 'var x = 1;var y = 2;'; console.log(eval(strLong1),x,y);//undefined 1 2 var strLong2 = 'var x = 1; x++;'; console.log(eval(strLong2),x);//1 2
scope
eval() uses the variable scope environment in which it is called. That is, it looks up the values of variables and defines new variables and functions exactly the same as code in the local scope
var b = 2; function foo(str,a){ eval(str); console.log(a,b); } foo('var b = 3;',1);//1 3
alias
When called through an alias, eval() will execute its string as top-level global code. The executed code may define new global variables and global functions, or assign values to global variables, but it cannot use or modify local variables in the function
var geval = eval; var x = 'global',y = 'global'; function f(){ var x = 'local'; eval('x += "changed";'); return x; } function g(){ var y = 'local'; geval('y += "changed";'); return y; } console.log(f(),x);//localchanged global console.log(g(),y);//local globalchanged
[Note] IE8-The result of calling eval() through an alias in the browser is the same as calling eval() normally
Side effects
The javascript interpreter has done a lot Code analysis and optimization. The problem with eval() is that the code used for dynamic execution usually cannot be analyzed, so the interpreter cannot optimize it, which will lead to performance degradation
Similar to eval() is setTimeout (), setInterval(), new Function(), etc. These functions can take strings as parameters and be executed dynamically when the program is running. The benefits of this execution mechanism cannot offset its performance loss, so you should try to avoid using
strict mode
Due to eval( ) function is too powerful, strict mode imposes strict restrictions on it
[1]Variables or functions cannot be created through the eval() function, but their values can be queried and changed
'use strict'; eval('var x = 1;'); console.log(x);//ReferenceError: x is not defined 'use strict'; var x = 1; eval('x = 2;'); console.log(x);//2
【2】It is forbidden to use eval as an identifier
'use strict'; var eval = 10;//SyntaxError: Unexpected eval or arguments in strict mode
The above is the detailed content of Detailed explanation of the definition, usage and side effects of JavaScript global function eval with examples. For more information, please follow other related articles on the PHP Chinese website!