汤姆大叔博客笔记【随时更新】

前端开发 作者: 2024-08-25 20:25:01
1、忘记var的副作用(Side Effects When Forgetting var) 隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。 通过var创
  • 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
  • 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
// 定义三个全局变量
var global_var = 1;
global_novar = 2;  反面教材
(function () {
   global_fromfunc = 3;  反面教材
}());

 试图删除
delete global_var;  false
delete global_novar;  true
delete global_fromfunc;  true

 测试该删除
typeof global_var;  "number"
typeof global_novar;  "undefined"
typeof global_fromfunc;  "undefined"
 反例
myname = "global";  全局变量
 func() {
    alert(myname);  "undefined"
    var myname = "local";
    alert(myname);  "local"
}
func();
等价于下面这段代码
myname = "global";  global variable
 func() {
   var myname;  等同于 -> var myname = undefined;
   alert(myname);  "undefined"
   myname = "local";
   alert(myname);  "local"}
func();
for (var i in man) {
   if (man.hasOwnProperty(i)) {  过滤原型属性或方法
      console.log(i,":",man[i]);
   }
}

 反面例子:
// for-in loop without checking hasOwnProperty()
 man) {
   console.log(i,":"
if (Object.prototype.hasOwnProperty.call(man,i)) {  过滤
      console.log(i,man[i]);
   }
}
var i,hasOwn = Object.prototype.hasOwnProperty;
for (i  man) {
    if (hasOwn.call(man,1)"> 过滤
        console.log(i,man[i]);
    }
}
 警告: 通不过JSLint检测
in man)  过滤
    console.log(i,man[i]);
}
  • 可以预期将来的ECMAScript版本或是JavaScript实现将一直将此功能当作内置方法来实现。例如,你可以添加ECMAScript 5中描述的方法,一直到各个浏览器都迎头赶上。这种情况下,你只是提前定义了有用的方法。
  • 如果您检查您的自定义属性或方法已不存在——也许已经在代码的其他地方实现或已经是你支持的浏览器JavaScript引擎部分。
  • 你清楚地文档记录并和团队交流了变化。
if (typeof Object.protoype.myMethod !== "function") {
   Object.protoype.myMethod =  () {
       实现...
   };
}
function foo(){}  声明,因为它是程序的一部分
  var bar = function foo(){};  表达式,因为它是赋值表达式的一部分

  new function bar(){};  表达式,因为它是new表达式

  ((){
    function bar(){}  声明,因为它是函数体的一部分
  })();
 
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68584.html