js11--js与C++、java异同

function F(){
    this.name = "111";
    this.say = function(){alert(222);}
    alert(333);
}    

var f1 = new F();//333
alert(f1.name);//111
f1.say();//222
f1();// f1 is not a function , f1是java里面的对象,不能()执行




var f2 = function(){   //f2也可以看成是一个类,跟上面写法一样
    this.name1 = "444";
    this.say1 = function(){alert(555);}
    alert(666);
}
f2();//666,f2当成c++里面的函数地址看,只能小括号执行,没有对象的属性方法
alert(f2.name1);//undefined,不能当成对象看,因为对象只有3中,var o = {},var o = new Object(),var o = new F()
f2.say1();//f2.say1 is not a function




function ff(){}
var f = new ff();  //一个对象生成,跟java一样
ff();  //函数调用,跟C++一样,函数名F是函数地址,F()是调用函数执行。
 
 

function f(){
    var num = 1;
    return function(){//把子类对象return出去,每return一次都是一个新的对象
        num++;
        alert(num);
    }
}
var r1 = f();
r1();//2
r1();//3

var r2 = f();//2个对象
r2();//2
r2();//3

函数每执行一次就开辟一个内存区域,嵌套函数产生的闭包,多个子函数闭包共享父闭包,函数级别的继承,
function test(){
    function(){  //不能这么写
        for(var i = 1 ; i <=5; i++){  //i
            alert(i);
        }                        
    }
    
    var d = function(){//不能不写var d = ,语法过不了,此时把函数里面当成类里面看待。可以这么写,但是函数不执行
        for(var i = 1 ; i <=5; i++){  //i
            alert(i);
        }                        
    }
function test(){
    function b(){  //可以这么写
    }
}

函数当类看时,跟java一样。   类里的函数和原型里的函数当对象的成员函数看,类里的属性和原型里的属性当成对象的成员变量看。

函数当函数看是,当成普通函数看就是当成函数地址看。

原文地址:https://www.cnblogs.com/yaowen/p/6865158.html