JS笔记:eval,with,调用函数let,const
eval
function foo(str, a) {
eval( str ); // 欺骗!
console.log( a, b );
}
var b=2;
foo( "var b=3;", 1 ); // 1, 3
with
function foo(obj) {
with (obj) {
a=2;
}
}
var o1={
a: 3
};
var o2={
b: 3
};
foo( o1 );
console.log( o1.a ); // 2
foo( o2 );
console.log( o2.a ); // undefined
console.log( a ); // 2 ——a 被泄漏到全局作用域上了!
IIFE
var a=2;
(function IIFE( global ) {
var a=3;
console.log( a ); // 3
console.log( global.a ); // 2
})( window );
console.log( a );
let
let j;
for (j=0; j<10; j++) {
let i=j; // 每个迭代重新绑定!
console.log( i );
}
const
var foo=true;
if (foo) {
var a=2;
const b=3; // 包含在 if 中的块作用域常量
a=3; // 正常 !
b=4; // 错误 !
}
console.log( a ); // 3
console.log( b ); // ReferenceError!
(完)
#学习路径#