zoukankan      html  css  js  c++  java
  • 复习JavaScript 1

      最近发现JavaScript有些基本概念模糊,趁这个机会学习下 @汤姆大叔 的《深入理解JavaScript》系列,复习记录下遗忘的基础知识。在此感谢汤姆大叔!

      一、编写高质量JavaScript代码的基本要点

      1、全局变量

      隐式全局变量和明确定义的全局变量间的不同:

    •  通过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"

      2、访问全局变量的方法

           确保自己在任何情况访问的都是全局变量:

    var global = (function () {
       return this;
    }());

      在strict模式下以上代码不行。

      3、函数中变量的预解析

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

      在函数中任意位置的var语句都会在函数顶部预先声明。于是上面代码等同于

    myname = "global"; // global variable
    function func() {
       var myname; // 等同于 -> var myname = undefined;
       alert(myname); // "undefined"
       myname = "local";
       alert(myname); // "local"}
    func();

      所以应该弹出的是

      undefined
      
    local

      代码处理分两个阶段,第一阶段是变量,函数声明,以及正常格式的参数创建,这是一个解析和进入上下文 的阶段。第二个阶段是代码执行,函数表达式和不合格的标识符(为声明的变量)被创建。但是,出于实用的目的,我们就采用了”hoisting”这个概念, 这种ECMAScript标准中并未定义,通常用来描述行为。  

       4、eval()和new Function()

      尽量不要使用eval(),它会干扰作用域链。必须使用时可以考虑用Function()代替。

      如下eval()可以访问和修改外部作用域: 

    (function () {
       var local = 1;
       eval("local = 3; console.log(local)"); // logs "3"
       console.log(local); // logs "3"
    }());
    
    (function () {
       var local = 1;
       Function("console.log(typeof local);")(); // logs undefined
    }());

      5、parseInt()和数值转换  

    var month = "06",
        year = "09";
    month = parseInt(month, 10);
    year = parseInt(year, 10);

      parseInt(year)最好指定技术参数,否则'09'会被当做8进制的数。(ECMAScript 5中不会,已经在最新chrome和Safari中尝试parseInt(year)默认是10进制的)。

      其他字符串转换成数字方法:

    +"08" // 结果是 8
    Number("08") // 8

        


    感谢@汤姆大叔 的《深入理解JavaScript》系列指导我学习!

      

  • 相关阅读:
    day 66 crm(3) 自创组件stark界面展示数据
    day 65 crm(2) admin源码解析,以及简单的仿造admin组件
    用 Python+nginx+django 打造在线家庭影院
    django -admin 源码解析
    day 64 crm项目(1) admin组件的初识别以及应用
    云链接 接口不允许 情况 解决方法 mysql Host is not allowed to connect to this MySQL server解决方法
    day 56 linux的安装python3 ,虚拟环境,mysql ,redis
    day55 linux 基础以及系统优化
    Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换
    Codeforces 990 调和级数路灯贪心暴力 DFS生成树两子树差调水 GCD树连通块暴力
  • 原文地址:https://www.cnblogs.com/ltchronus/p/3527498.html
Copyright © 2011-2022 走看看