zoukankan      html  css  js  c++  java
  • Javascript学习笔记-Function

    一.Function Declaration

    1)必须具有名字

    2)在代码中,函数声明要么定义在全局范围内要么定义在函数体内

    3)当进入调用上下文阶段就会创建函数声明

    4)只是在调用上下文内对VO对象赋值有影响

    5)定义的方式如下:

    function functionDeclarationName(){

    }

    二.Function Expression

    1)名字可选。

    2)在代码中,定义在表达式位置

    3)函数表达式对于在上下文内的VO对象没有影响

    4)在代码执行阶段被创建

    5)优势:避免污染全局的 VO对象

    三.Immediately-Invoked Function Expression

    1)在非表达式位置时候,如果需要创建立即执行的函数,则需要()圆括号操作符号。 例如:

    (function () {})();
    (function () {}());

    2)在表达式位置时,如果需要创建立即执行的函数,则()圆括号可以省略。例如:

    var foo = {
      
      bar: function (x) {
        return x % 2 != 0 ? 'yes' : 'no';
      }(1)
      
    };
      
    alert(foo.bar); // 'yes

    3)在代码执行阶段创建函数,接着被立即自行,之后再被删除(如果没有被赋值给其他对象)

    四。Function Statement(FS)

    是Function的一个扩展实现,对于每个浏览器有自己不同的实现方式。 将其看成函数声明,在函数进入上下文阶段的时候创建并且可以保存成VO.

    if (true) {
      
      function foo() {
        alert(0);
      }
      
    } else {
      
      function foo() {
        alert(1);
      }
      
    }
      
    foo(); // 1 or 0 ? test in different implementations

    五。Named Function Expression (NFE)

    FE with a name can call it self in the recursive way.

    FE cann’t influence VO  of context which means that it is impossilbe to call the function by the name befor or after the definiton)

    (function foo(bar) {
      
      if (bar) {
        return;
      }
      
      foo(true); // "foo" name is available
      
    })();
      
    // but from the outside, correctly, is not
      
    foo(); // "foo" is not defined

    六.Functions created via Function constructor

    1) [[Scope]]属性只能是Global

    2)the functions created via Function constructor always require more memory resources,优化器不能作用与合并对象

    var x = 10;
      
    function foo() {
      
      var x = 20;
      var y = 30;
      
      var bar = new Function('alert(x); alert(y);');
      
      bar(); // 10, "y" is not defined
      
    }

    七。函数构造过程

    F = new NativeObject();
      
    // property [[Class]] is "Function"
    F.[[Class]] = "Function"
      
    // a prototype of a function object
    F.[[Prototype]] = Function.prototype
      
    // reference to function itself
    // [[Call]] is activated by call expression F()
    // and creates a new execution context
    F.[[Call]] = <reference to function>
      
    // built in general constructor of objects
    // [[Construct]] is activated via "new" keyword
    // and it is the one who allocates memory for new
    // objects; then it calls F.[[Call]]
    // to initialize created objects passing as
    // "this" value newly created object 
    F.[[Construct]] = internalConstructor
      
    // scope chain of the current context
    // i.e. context which creates function F
    F.[[Scope]] = activeContext.Scope
    // if this functions is created 
    // via new Function(...), then
    F.[[Scope]] = globalContext.Scope
      
    // number of formal parameters
    F.length = countParameters
      
    // a prototype of created by F objects
    __objectPrototype = new Object();
    __objectPrototype.constructor = F // {DontEnum}, is not enumerable in loops
    F.prototype = __objectPrototype
      
    return F
  • 相关阅读:
    类和对象
    函数复习
    20145214 《网络对抗技术》 Web安全基础实践
    20145214 《网络对抗技术》 Web基础
    20145214 《网络对抗技术》 网络欺诈技术防范
    20145214 《网络对抗技术》 信息搜集与漏洞扫描
    20145214 《网络对抗技术》 MSF基础应用
    20145214 《网络对抗技术》 恶意代码分析
    20145214《网络对抗技术》免杀原理与实践
    20145214《网络对抗》MAL_后门原理与实践
  • 原文地址:https://www.cnblogs.com/lily-tiantian/p/4323767.html
Copyright © 2011-2022 走看看