zoukankan      html  css  js  c++  java
  • 《JavaScript核心概念》基础部分重点摘录

    注:《JavaScript核心概念》适合深入了解JavaScript,比我买的《JavaScript框架设计》语言和内容丰富多了(可能是我水平尚浅吧)。

    1. 作用域

    var herp=”one”;  
    {  
    var herp=”two”;  
    }  
    alert(herp); //two,

    上面这个很简单,那看看下面这两个。

    //代码1
    var
    str="global"; function scopteTest(){ alert(str); //1 str="local"; alert(str); //2 }

    这里1和2会输出什么呢?

    //代码2
    var
    str="global"; function scopteTest(){ alert(str); //3 var str="local"; alert(str); //4 }

    这里3和4又会输出什么呢?

    答案:1、2、3、4分别输出

    global
    local
    undefined
    local

    很神奇吧,尤其是第三个,详情去看《JavaScript核心概念》吧。

    大致原理:JavaScript的作用域是词法作用域。在代码2中,词法分析结束后,str变量 已经加入到 scopteTest函数局部作用域了,即整个函数内部已经知道自己内部有个 str,当然就不再去访问 外部的 str了。但由于 //3 处于 变量的 定义 之前,所以 会输出 undefined。

    2. 经典的闭包例子

    //例子1
    var
    outter=[]; function closureTest(){ var array=["one","two","three","four"]; for(var i=0; i<array.length; i++){ var x={}; x.no = i; x.text = array[i]; x.invoke = function( i ){ print(i); }; outter.push(x); } } closureTest(); print(outter[0].invoke()); print(outter[1].invoke()); print(outter[2].invoke()); print(outter[3].invoke());
    //例子2
    var outter=[];
    function closureTest(){
      var array=["one","two","three","four"];
      for(var i=0; i<array.length; i++){
        var x={};
        x.no = i;
        x.text = array[i];
        x.invoke = function( no ){
          return function(){
             print(no);
          }
        }(i);
        outter.push(x);
    
      }
    }
    
    closureTest();
    print(outter[0].invoke());
    print(outter[1].invoke());
    print(outter[2].invoke());
    print(outter[3].invoke());

    例子1输出:

    4
    4
    4
    4

    例子2输出:

    0
    1
    2
    3

    3. JavaScript函数的创建

    创建JavaScript函数的一种不长用的方式(几乎没有人用)是通过new操作符来作用于Function“构造器”:  

    var funcName = new Function( [argname1, [... argnameN,]] body );  

    参数列表中可以有任意多的参数,然后紧跟着是函数体,比如:  

    var add = new Function("x", "y", "return(x+y)"); print(add(2, 4));

    但更常用的是通过字面量来创建函数:

    function add(x, y){  return x + y; }

    4. new 一个函数的实质过程

    在JavaScript中,通过 new 操作符,来作用一个函数,实质过程是这样的:

      首先,创建一个空对象,然后用函数的 apply 方法,将这个空对象传入作为 apply 的第一个参数,及上下文参数。这样函数内部的this将会被这个空对象所替代。

      例如:

    var triangle = new Shape("triangle");
    //相当于下面:
    var triangle = {};
    Shape.apply(triangle, ["triangle"]);
  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/muyun/p/3792714.html
Copyright © 2011-2022 走看看