JavaScript学习笔记

对象

创建对象几种方式


//字面量

var customer = {};



//构造函数

var obj = new Object();

构造函数

构造函数和一般函数并没什么大的区别。一般函数名大写,对象自身属性用this.attr表示。也可以通过原型动态添加属性。


function Person(name, age){

    this.name = name;

    this.age = age;

}



//通过原型添加属性

Person.prototype.address = 'hz';

Person.prototype.work = function (someting){

    //dosometing

};

Person.prototype.car = {};

函数

函数也是一种对象,可以用Function构造函数直接创建:


var func = new Function('arg1', 'arg2', 'return arg1 + arg2');
  • 在Function中除了最后一个是函数体外,其他都是传入的参数。

  • 函数有自己的属性length,表示参数的个数。

  • 函数里内置变量arguments表示传入的参数,类似数组。但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。

  • 函数里内置this表示当前上下文。

函数声明和表达式


//以下是声明。可以在声明前提前调用函数。

function add(){



}



//以下是表达式。只用在表达式定义后才能调用函数

var add = function(){

    //...

}

函数名作为值

既然函数是一种对象,那么函数名其实就是一个对象的引用,它可以作为值进行传递和赋值。可以用来实现回调和闭包。


//回调func

function call(args, func){

    return func(args);

}





//从一个函数返回另外一个函数

function closure(args){

    return function(args){

        //...

    };

}

立即执行函数

一般形式:


(function (arg){ 

    //...

})(arg);

顾名思义,立即执行函数就是定义后马上执行的函数。在立即执行的函数里面是独立的命名空间,可以隔离全局命名空间,避免污染全局命名空间。

闭包

闭包是指可以访问其它函数(一般指外部函数)作用域的函数。

作用域

JavaScript没有私有成员的说法,任何成员都是共有的。不过函数中的变量被认为是私有的,函数外部无法访问。

没有块级作用域

Javascript不像C和Java里面有块级作用域。


    for(var i = 0; i < 10; i++){

    }//i有可能污染全局命名空间。



    // i没有被销毁,仍旧有效

    var i;//即使重新声明后,仍旧视而不见

    console.log(i); //这里仍旧输出10


设置私有作用域

用立即执行函数设置私有作用域;
从而限定

(function privateScope(){
    var i = 10;

})();

//i已经被销毁了
console.log(i);//这里访问会报错:i is not defined

你可能感兴趣的:(JavaScript)