javascript概念

 做用域: js没有块做用域,只有函数做用域javascript

 做用域链: 按序检索对象列表java

 自执行函数:拥有私有做用域数组

 匿名函数:this -> window函数

 初始化: 全局对象, 执行环境栈, 全局执行环境this

 类数组(伪数组): 可像数组索引,有length属性,可是没有数组的方法,实际上是个对象spa

    例: arguments是一个object对象prototype

    Array.prototype.slice.call(arguments, 0)是用来将arguments变量转换为真正的数组.code

    Arguments的属性callee都会指向当前的被调函数.(可用于递归匿名函数)对象

    [1] callee与caller递归

        caller返回一个函数的引用,这个函数调用了当前的函数;

      使用这个属性要注意:
       1. 这个属性只有当函数在执行时才有用
       2. 若是在javascript程序中,函数是由顶层调用的,则返回null

          var a = function() { 

          alert(a.caller); 
        } 
        var b = function() { 
          a(); 
        } 
        b(); // var b = function() { a(); }

预编译: 声明提早(hoisting)

  1)函数声明会置顶

  2)变量声明也会置顶

  3)函数声明 > 变量声明

  4)变量和赋值语句一块儿书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置

  5)声明过的变量不会重复声明

  同一个标识符的状况下,变量声明与函数声明都会提高;函数声明会覆盖变量声明,但不会覆盖变量赋值,即:若是声明变量的同时初始化或赋值,

  那么变量优先级高于函数。

  *屡次声明变量,只取最后值

函数表达式

  (1) 要清楚二者的区别:

       (function {// code})是表达式, function {// code}是函数声明.

   (2) js"预编译"的特色:

       js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.

   (3) 当js执行到function() {//code}();时, 因为function() {//code}在"预编译"阶段已经被解释过,

     js会跳过function(){//code}, 试图去执行(), 故会报错;

     当js执行到(function {// code})();时, 因为(function {// code})是表达式, js会去对它求解获得返回值,

     因为返回值是一 个函数, 故而遇到();时, 便会被执行.

   (4) 函数转换为表达式的方法并不必定要靠分组操做符(),咱们还能够用void操做符,~操做符,!操做符……

      如:!function(){  alert("另类的匿名函数自执行"); }();

相关文章
相关标签/搜索