摘要:一些ES6语法之函数上下文

javascript中函数运行的上下文或者环境很特殊


function person(value)
{
    let valueone = 1;
    
    this.then=function (zezeleft,zezeright)
    {
        return new person((left,right) => 
        {
            
            next(zezeleft,zezeright);
            right(valueone);
        }
        )        
    }
    
    function left(res)
    {
        valueone = res;
    }
    
    function right(res)
    {
        valueone = res+"zeze";
    }
    
    this.didi = function()
    {
        console.log(valueone);
    }
    
    function next(left , right)
    {
        console.log(valueone);
    }
    value(left,right);
}

p = new person((left,right) => {console.log("one");left('hello1')});
//p=p.then(console.log("left1"),console.log("right1"));
p=p.then(()=>{console.log("left1")},()=>{console.log("right1")});

重点关注:

this.then=function (zezeleft,zezeright)
    {
        return new person((left,right) => 
        {
            
            next(zezeleft,zezeright);
            right(valueone);
        }
        )        
    }

其中next的作用域是在this这个对象中,left和right是在new person这个对象传入的,作用域是new person。也就是next这个函数里操作的所有的变量和方法都来自于this,left和right方法操作的变量和方法都来自域new person。