随笔记录一下JS 中使用域自动提升时的一些注意点:
/**
* Created by HuangSL on 2017/09/12.
*/
function testScope() {
var funInner = "Inner";
funcOut = "outer"; //没有 var 声明,会被自动提升到 全局作用域
if (true) {
var ifInner = "Inner if true"; //变量的作用域被自动提升到 testScope fun
ifOuter = "Outer if true"; //没有 var 声明,会被自动提升到 全局作用域
}
if (false) {
var ifInnerFalse = "Inner if false";//变量的作用域被自动提升到 testScope fun
ifOuterFalse = "Outer if false"; //可以防止变量的作用域被自动提升
}
console.log(funInner); //Inner
console.log(funcOut); //outer
console.log(window.funcOut); //outer
console.log(ifInner); //Inner if true
console.log(ifInnerFalse); //undefined
console.log(ifOuter); //Outer if true
console.log(window.ifOuter); //Outer if true
//console.log(ifOuterFalse);//ReferenceError: ifOuterFalse is not defined
}
testScope();
/* typeof 可以用来补全一些全局方法或变量 */
//console.log(globalFun);//ReferenceError: globalFun is not defined
console.log(typeof globalFun);// "undefined"
if (typeof globalFun === "undefined") {
globalFun = function () { //不使用 var ,如果变量已经存在,将不会被重复声明,可以防止某些变量重名而出错
console.log("this is my global function;");
}
}
console.log(typeof globalFun);// "function"