zoukankan      html  css  js  c++  java
  • js 注意点

    1.var

    // 反例
    myname = "global"; // 全局变量
    function func() {
        alert(myname); // "undefined"
        var myname = "local";
        alert(myname); // "local"
    }
    func();

    JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。

    Function

      console.log(fun);
            var fun=function () {
                var a = "aa";
                var b = "bb";
           }
           console.log(fun);

    结果:

     可以看出方法的申明就跟上面不一样,感觉function fun就是一个整体。

      2)全局变量与隐式全局变量差别:

    • 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
    • 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。

        这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的:

    // 定义三个全局变量
    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"

    2.eval Function

     Function可以替代eval执行字符串的脚本

    console.log(typeof un);    // "undefined"
    console.log(typeof deux); // "undefined"
    console.log(typeof trois); // "undefined"
    
    var jsstring = "var un = 1; console.log(un);";
    eval(jsstring); // logs "1"
    
    jsstring = "var deux = 2; console.log(deux);";
    new Function(jsstring)(); // logs "2"
    
    jsstring = "var trois = 3; console.log(trois);";
    (function () {
       eval(jsstring);
    }()); // logs "3"
    
    console.log(typeof un); // number
    console.log(typeof deux); // "undefined"
    console.log(typeof trois); // "undefined"

    eval()和Function构造不同的是eval()可以干扰作用域链,而Function()更安分守己些。不管你在哪里执行 Function(),它只看到全局作用域。

    由上面可以看出,Function只调用全局作用域 (自己内部变量当然可以)

    3.return {}

    // 警告: 意外的返回值
    function func() {
       return
      // 下面代码不执行
       {
          name : "Batman"
       }
    }

    由于隐含分号,函数返回undefined。前面的代码等价于:

    // 警告: 意外的返回值
    function func() {
       return undefined;
      // 下面代码不执行
       {
          name : "Batman"
       }
    }

    正确方式:

    function func() {
       return {
          name : "Batman"
       };
    }

     带return的function实例化和方法调用

    由上面可以看出

    fun实例化后是一个有name属性的对象

    fun调用后返回的是一个字符串

    没有return 的function调用返回的是一个undefined

    4.自执行

     

    函数声明:

    函数表达式:

    (function(){...}())   //函数表达式:注意它被包含在分组操作符‘()’中,分组操作符只能包含表达式

    (function(){...})();

    var abc=/+/new/!/-/&&/~ function(){...}();

    http://www.f2es.com/javascript-function-expression/

    http://www.cnblogs.com/TomXu/archive/2011/12/28/2286877.html

    http://www.kankanews.com/ICkengine/archives/33701.shtml

  • 相关阅读:
    思考问题的方法
    专注于工作以及工作相关的技术
    优化的思想
    Web开发基础之问 20130505
    外企一线开发经理的核心竞争力
    你说的话算不算数?
    不抱怨的世界
    欲立庙堂,先立栋梁
    ASP.NET 高级程序设计学习笔记 20130505
    function在forn表单中方法报错的解决方法
  • 原文地址:https://www.cnblogs.com/hongdada/p/3277336.html
Copyright © 2011-2022 走看看