Function

Posted 925039847z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Function相关的知识,希望对你有一定的参考价值。

1.function*

会定义一个生成器函数 (generator function),它返回一个  Generator  对象。

function* name([param[, param[, ... param]]]) { statements }
  • name:函数名
  • param:要传递给函数的一个参数的名称,一个函数最多可以有255个参数。
  • statements:普通JS语句。

生成器函数在执行时能暂停,后面又能从暂停处继续执行。

function* idMaker(){
  var index = 0;
  while(index<3)
    yield index++;
}

var gen = idMaker();
console.log(gen.next().value); 
console.log(gen.next().value); 
console.log(gen.next().value); 
console.log(gen.next().value); 

2.箭头函数(arrow function)

(1).他们比传统函数表达式简洁。

const arr = [1, 2, 3];
const squares = arr.map(x => x * x);

// 传统函数表达式:
const squares = arr.map(function (x) { return x * x });

(2).箭头函数不会绑定关键字this,我们不需要用bind()或者that = this这种方法了

function UiComponent() {
    const button = document.getElementById(‘myButton‘);
    button.addEventListener(‘click‘, () => {
        console.log(‘CLICK‘);
        this.handleClick(); // this不再是button
    });
}

(3)和this同样没有被箭头函数绑定的参数有

  • arguments
  • super
  • this
  • new.target
function foo() {
    setTimeout( () => {
        console.log("args:", arguments);
    },100);
}

foo( 2, 4, 6, 8 );
// args: [2, 4, 6, 8]

3.declaration and expression

javascript中,function declaration 函数声明如下:

而function expression 函数表达式如下:



4.scope和closure
scope:
在JavaScript中所有的域都是并且只能是被函数域(function scope)所创建,它们不能被for/while循环或者if/switch表达式创建。New function = new scope - 仅此而已。
一个简单的例子来说明域的创建:

// Scope A
var myFunction = function () { 

// Scope B 
var myOtherFunction = function () {  
  // Scope C
};
};

创建新的域以及创建本地变量、函数、对象都是如此简单。

closure:

闭包就是一个内部函数,它具备访问外部函数变量(这些变量位于作用域链中)的能力[注意变量不包含this和arguments]。

closure可以干2件事情:

  1)closure可以调用(闭包存储的外部变量是引用而不是值,这点非常重要)在当前函数以外的定义的变量(即使外部函数已经返回);

 

  2)closure可以修改外部定义的变量值

function mixFunctionFix(a)
    {
        var result=[],i,n;
        n=a.length;
        for(i=0;i<n;i++){
            //IIFE技术来解决JS缺少块级作用域的解决方案
            (function(j){
                result[i]=function(){
                    //Closure对外部变量是引用
                    console.log("for j="+j);
                    return a[j];
                }
            })(i)
        }
        return result;
    }
    var mixcall=mixFunctionFix([10,20,30]);
    var f=mixcall[0];
    console.log(f());//10

 


































以上是关于Function的主要内容,如果未能解决你的问题,请参考以下文章

vue2.0 代码功能片段

js常用代码片段

可以直接拿来用的15个jQuery代码片段

imgwarp.cpp:3143: error: (-215:Assertion failed) _src.total() > 0 in function ‘warpPerspective‘(代码片段

几个可以直接拿来用的jQuery代码片段

几个可以直接拿来用的jQuery代码片段