• 深入js之基本语法


    周末正好有空就研究了下汤姆大叔的js系列博客,虽然只是学到点皮毛,依然获益匪浅。不得不说大牛的境界岂是吾等小辈可理解。

    变量:

    js有隐含的全局概念,意味着不声明的所有变量都是全局对象的属性。

    function sum(x,y){
        var res = x + y;
        return res;
    }

     以上隐式声明全局变量的做法会多出一个全局命名空间,这显然不是我们想要的。

    function sum(x, y) {
       var res= x + y;
       return res;
    }

    所以记住始终使用var声明变量。

    funtion num(){
        var a = b = 0;
    }

    以上链式声明变量依然是隐式声明全局变量。有朋友可能会疑惑,在局部里声明的变量怎么就变全局变量了!

    但结果就是:a是局部变量,b是全局变量。

    这是因为这个从右到左的赋值,首先是赋值表达式b = 0,但b没有声明,自然b就成全局变量了;然后再把0返回给声明了的a。这跟如下的代码同理:

    function num(){
        var a = {b = 0};
    }
    

    所以一次先声明所有需要声明的变量是比较好的习惯,并且在函数的顶部使用链式分配会更加容易阅读与修改:

    function(){
        var a,b;
    }

    var的另一个比较少用一点的就是:

    用var声明的全局变量是不能被delete删除的;而没用var声明的全局变量是能被delete删除。

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

    这是一个比较少注意到的问题,就是var声明不是放在函数顶部所造成的未定义。你可能会以为第一次弹窗会弹出'global',其实是undefined。

    原因是myname被当做了局部变量,而第一个alert时该变量还未声明。等同于以下代码:

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

    顺便提一下代码是怎么处理的:第一阶段是解析变量以及函数和参数等,第二阶段才是执行代码。

    for循环:

     平常我们使用for循环一般是如下形式:

    for(var i=0 i<arr.length; i++){
        console.log(arr[i]);
    }

    但更好的办法是先缓存集合或者数组的长度:

    var i,arrLen;
    for(i=0,arrLen=arr.length;i<arrLen;i++){
        ...
    }

    还可以进一步优化的部分就是用i--代替i++,原因是向下数到0通常会更快:

    var i;
    for(i=arr.length;i--;){
        ...
    }

    或者是使用while:

    var i = arr.length;
    while(i--){
        ...
    }

    这些优化只会体现在性能上,实际项目中才能体现威力。

  • 相关阅读:
    codeforces 616E. Sum of Remainders 数学
    codeforces 620F. Xors on Segments
    codeforces 417D. Cunning Gena 状压dp
    bzoj 1934 : [Shoi2007]Vote 善意的投票 最小割
    codeforces 628F. Bear and Fair Set 网络流
    codeforces 626E. Simple Skewness 三分
    div嵌套,内层的margin-top会跑到外层
    测试用导航(为了方便在各个测试页面间进行跳转,只需将此js代码引入每个页面即可) V2.0
    ECS_8080端口连接拒绝问题排查
    京东技术架构(二)构建需求响应式亿级商品详情页
  • 原文地址:https://www.cnblogs.com/11lang/p/6084064.html
Copyright © 2020-2023  润新知