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
  • 相关阅读:
    微信小程序 获取手机号 获取基础信息 自定义分享 获取dom节点
    微信公众号 生成带参数进入公众号关注页的二维码 监听用户关注公众号事件 自定义菜单栏 (服务端)
    js 防抖和节流 (学习笔记)
    vue 封装axios api模块化 并使用方式 MD5 数据加密
    1.1 Logistics Regression模型
    音视频入门-19-使用giflib处理GIF图片
    思维
    面试题库
    前端代码规范
    D3JS笔记
  • 原文地址:https://www.cnblogs.com/lily-tiantian/p/4323767.html
Copyright © 2011-2022 走看看