1.定义理解

目录:

1.基本类型
2.Function函数
3.this
4.call与apply
5.块
6.闭包
7.对象
8.类
9.原型对象
10.单体模式

1.基本类型

number、string、boolean、object、function、undefined

Number
    var num1 = 10 ;
    var num2 = 10.5 ;
    var num3 = .6 ;        // 0.6
    var num4 = 070 ;    // 八进制 56
    var num5 = 1/0 ;    // 正无穷
    var num6 = window.parseInt("dasdsdsadsad");        //NaN not a number

 

String
   单双引号表示的字符串

 

Boolean
   truefalse

 

Object
    var date = new Date();
    var arr  = new Array();
    var obj  = {name:'bjsxt' , age:10};//json

 

Undefined
    //Undefined 变量声明了 但是并没有被赋值  其实也等同于Null
    var a ;
    alert(a);
    alert(undefined == null); //true  三个等号即判断类型又判断数据
    alert(typeof null);    //表示的就是一个空对象的引用 object

 

function
    function fun(){
        console.info('fun...');
    }
  fun表示引用;fun();表示调用
  alert(typeof fun);//function

 

 

2.Function函数

1: function语句形式
fun1();//javascript解释器 直接回去找 , 其他的代码就从上到下顺序执行,因此可以在定义之前进行调用
function fun1(){  
    alert('fun1...');
};

 

2: 函数直接量的形式
var fun2 = function(){//fun2();必须放在声明之后
    alert('fun2...');
};

 

3: 构造函数形式
var fun3 = new Function('x','y','return x+y;');  //具有顶级作用域
alert(fun3(10,20));//30

 

var k = 1 ;
function test(){
    var k = 2 ;
    //创建三种方式的函数:
    //function f(){return k;};//2
    //var f = function(){return k;};//2
    var f = new Function('return k;');//1  ,无论在哪里new都相当于在最顶层进行new,去全局变量
    alert(f());
};
test();

 

arguments对象
第一个作用:接受函数的实际参数
arguments对象:每一个函数内部都有一个arguments对象
function test(x,y){
    alert(arguments.length);        // len = 3
    alert(arguments[2]);            // val = 3
};
test(1,2,3);

 

第二个作用: 通常用于递归操作 
// arguments.callee 表示引用当前函数本身
function fact(number){
    if(number <= 1){
        return 1 ;
    } else {
        return number*arguments.callee(number-1);
    }
};
//alert(fact(5));
var fact2 = fact ;//引用赋值给变量
fact = null ;
alert(fact2(5));

 

3.this

This 关键字 在javascript里的使用
this关键字总是指向调用者,谁调用函数,this就指向谁
直接调用函数,则this是window

var x = 5; // window.x = 5 ;
function test() {
alert(this.x);
};
alert(test.x);
window.test();

4.call与apply

call apply 主要作用是绑定作用域

var color = 'red';
var obj = {
color : 'yellow'
};
function showColor(x, y, z) {
alert(x + y + z);
alert(this.color);
};
// call、apply 绑定一个函数 ,到你指定的作用域内执行,区别apply的参数是数组
showColor.call(obj, 10, 20, 30);//color = 'yellow'赋值
showColor.call(window, 10, 20, 30);// color = 'red'赋值
showColor.apply(obj, [2, 3, 4]);

 

5.块

js中的块是指一个函数整体,因为变量回收是按照函数执行完以后进行回收

如想在函数中实现块的划分可以使用匿名函数(function(){})(); 

不使用匿名函数
function test(){
for(var i = 1 ;i <=5 ; i++){
alert(i);
}    
alert(i);//会显示i=6
};
 使用匿名函数
function test(){
(function(){
for(var i = 1 ;i <=5 ; i++){
  alert(i);
}    
})();
  alert(i);//提示错误未定义
};
test();

 

6.闭包

闭包 :执行环境、作用域链、js垃圾回收
函数碰到return直接返回、没有renturn 返回结果undefined
在javascript语言里: 更不提倡使用全局变量 (1:不安全、2:做变量搜索查找的时候效率比较低)
function test(){
return function(){
alert('我是闭包体代码...');
};
};
var f = test(); // 获取对象,使用对象调用函数,由于函数没有名称则f()进行调用
alert(typeof f);//function
f();//可以直接调用

function test(){
var temp = 10 ;
return function(){
alert(temp);
};
};
test()();//保留了test()的局部变量temp因为内部function中调用;避免使用全局变量 

闭包使用

var inp = (function(){
    var i = 0;
    return {
        getCount:function(){
            alert(++i);
        }
    };
})();

inp.getCount();
inp.getCount();
inp.getCount();
inp.getCount();

 7.对象

    //var obj = new Object();等同于 var obj={};
    var obj = {name:'z3' ,sex:'', age:20};    //json对象
    obj.sex = '';        //新增属性
    obj.age = 25 ;        //修改属性的值
    delete obj.name ;    //删除对象的属性或方法,无法删除对象可使用obj={}
    
    //枚举对象内置属性的循环
    for( var attr in obj){
        alert(attr + " : " + obj[attr]);
    }}

 

 8.类

Ext.onReady(function(){
//定义了一个js的类
    var Person = function(name , age){
        this.name = name ; 
        this.age  = age ;
        // private 
        var _sex = '';    //js的私有属性
        this.getSex = function(){
            return _sex ;            
        };
        this.setSex = function(sex){
            _sex = sex ;
        };
    };
    //扩展类
    Person.prototype.id = 10 ;   //添加属性id
    Person.prototype.method = function(){ //添加方法method
        alert(this.age);
    };
    //实例化对象
    var p=new Person();
    
});

 

 9.原型对象

原型对象的构造器 总是指向当前对象的模板,可以灵活扩展类对象

Ext.onReady(function(){
//定义了一个js的类
    var Person = function(name , age){
        this.name = name ; 
        this.age  = age ;
        // private 
        var _sex = '';    //js的私有属性
        this.getSex = function(){
            return _sex ;            
        };
        this.setSex = function(sex){
            _sex = sex ;
        };
    };
    //原型对象的构造器 总是指向当前对象的模板
    Person.prototype = {
        constructor:Person ,
        id:10 , 
        method : function(){
            alert('method....');
        } 
    };    
    //实例化对象
    var p=new Person();
});

 

 10.单体模式

简单单体
Ext.onReady(function(){
    var SXT = {}; //从无到有
    SXT.Array = {
        each:function(){
            alert('each....');
        },
        filter:function(){
            alert('filter...');
        }
    };
    SXT.staticMethod = function(){ //静态方法添加
        alert('我是单体下的静态方法!');
    };
    
    SXT.Array.each();
    SXT.staticMethod();
});

 

 闭包单体
    var SXT = (function(){
        var Array = {
            each:function(){
                alert('each...');
            }
        };
        return {
            arrayEach:function(){
                Array.each();
            }
        };
    })();
    SXT.arrayEach();

 

posted @ 2015-08-17 23:24  W&L  阅读(162)  评论(0编辑  收藏  举报