zoukankan      html  css  js  c++  java
  • JavaScript 学习笔记

    1、进行比較时。尽量使用“===”。而不是使用“==”,由于“==”操作符会为了比較两个值而进行强制类型转换,会带来性能消耗。


    2、为了达到遍历数组的最佳性能。推荐使用经典的 for 循环。
     var list = [1, 2, 3, 4, 5, ...... 100000000];
    for(var i = 0, l = list.length; i < l; i++) {
        console.log(list[i]);

    上面代码有一个处理,就是通过 l = list.length 来缓存数组的长度。
    尽管 length 是数组的一个属性。可是在每次循环中訪问它还是有性能开销。 可能最新的 JavaScript 引擎在这点上做了优化,可是我们没法保证自己的代码是否执行在这些近期的引擎之上。
    实际上,不使用缓存数组长度的方式比缓存版本号要慢非常多。


    3、使用var array=[] 来声明数组。代码易读性更高。降低可能发生的错误。


    4、隐式的全局变量
     // 脚本 A
    foo = '42';
    // 脚本 B
    var foo = '42' 
    上面两段脚本效果不同。脚本 A 在全局作用域内定义了变量 foo。而脚本 B 在当前作用域内定义变量 foo。所以声明变量时都要使用var,防止莫名其妙的bug。


    5、JavaScript 中每一个函数内都能訪问一个特别变量 arguments。这个变量维护着全部传递到这个函数中的參数列表。注意: 因为 arguments 已经被定义为函数内的一个变量。 因此通过 var keyword定义 arguments 或者将 arguments 声明为一个形式參数, 都将导致原生的 arguments 不会被创建。arguments 变量不是一个数组(Array)。 虽然在语法上它有数组相关的属性 length,但它不从 Array.prototype 继承,实际上它是一个对象。


    6、
    闭包意味着当前作用域总是可以訪问外部作用域中的变量。 由于 函数 是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。它可以模拟私有变量
     function Counter(start) {
        var count = start;
        return {
            increment: function() {
                count++;
            },


            get: function() {
                return count;
            }
        }
    }


    var foo = Counter(4);
    foo.increment();
    foo.get(); // 5 
    这里。Counter 函数返回两个闭包,函数 increment 和函数 get。 这两个函数都维持着 对外部作用域 Counter 的引用。因此总能够訪问此作用域内定义的变量 count.


    7、为了不使用全局变量和让程序模块化,在Javascript中有一种方法:使用匿名包装器来创建命名空间
     (function() {
        // 函数创建一个命名空间
        window.foo = function() {
            // 对外公开的函数,创建了闭包
        };

    })(); // 马上运行此匿名函数 
    匿名函数被觉得是 表达式。因此为了可调用性,它们首先会被运行。


     ( // 小括号内的函数首先被运行
    function() {}
    ) // 而且返回函数对象
    () // 调用上面的运行结果。也就是函数对象 


    有一些其它的调用函数表达式的方法,比方以下的两种方式语法不同。可是效果一模一样。


     // 另外两种方式
    +function(){}();
    (function(){}()); 


    8、绝对不要省略分号,同一时候也提倡将花括号和对应的表达式放在一行, 对于仅仅有一行代码的 if 或者 else 表达式,也不应该省略花括号。

    这些良好的编程习惯不仅能够提到代码的一致性,并且能够防止解析器改变代码行为的错误处理。假设代码在须要分号的地方没有写分号,解析器会自己主动插入分号,有可能会改变代码。


    9、call是function的内置方法,使用方法:obj1.method1.call(obj2,argument1,argument2) 
    如上,call的作用就是把obj1的方法放到obj2上使用。后面的argument1..这些做为參数传入。apply的作用和call是同样的,可是apply參数要以数组的形式传递,所以当參数明白时可用call, 当參数不明白时可用apply给合arguments 。如

    print.call(window, "背" , "光" , "脚", "本"); 

    print.apply(window, arguments); 

  • 相关阅读:
    Python Django :HTTP生命周期
    Docker简介及Centos 7 安装[初步配置]
    python:Django 简介。
    python :Django url /views /Template 文件介绍
    python:异常处理及程序调试
    python之正则表达式【re】
    Day 21 python :面向对象 类的相关内置函数 /单例模式 /描述符
    Day 22: 软件开发目录设计规范
    Day 20: 面向对象【多态,封装,反射】字符串模块导入/内置attr /包装 /授权
    SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5421375.html
Copyright © 2011-2022 走看看