首页 > 代码库 > 典型例子

典型例子

1.变量声明作用域

(function(){    var a = b = 5;})();alert(b); //5

b默认是全局变量,没有显示的用window.b 引用,如果采用严格模式 ‘use strict‘ 

(function(){    ‘use strict‘   var a = window.b = 5;})();

注意这里:alert(a); // error 因为a是函数局部变量 访问不到。

 

2. 原型的理解

对String 原型增加一个函数,使用方式:str.repeatity(2); // strstr;

if(typeof String.prototype.repeatify != "function")    {        String.prototype.repeatify = function(times){            var str="";            for(var i=0;i<3;i++){                str += this;            }            return str;        }    }

或者

String.prototype.repeatify = String.prototype.repeatify || function(times){            var str="";            for(var i=0;i<3;i++){                str += this;            }            return str;        

先判断原型中是否存在repeatity 函数,防止每次都重新设置函数

注意this 是指当前调用的string对象。

3. 变量声明问题

(function test(){    // alert(a);   //undefined    // alert(foo()); //2    var a = 1;    function foo(){        return 2;    }})();

第一个alert 时是undefind 因为a已经存在函数内,被声明但是没有被初始化,相当于

(function test(){    var a;    function foo(){        return 2;    };    alert(a); //undefinde    a = 1;})();

 

4. 作用域问题

var name = "Jack";var obj = {    name : "Obj_Jack",    prop:{        name:‘prop_Jack‘,        getName : function(){            return this.name;        }    }}// alert(obj.prop.getName()); //prop_Jackvar t = obj.prop.getName; //t是全局函数// alert(t()); //Jack// alert(t.call(obj)); // Obj_Jack (重新设置作用域)

第一个alert obj引用属性prop,然后prop引用在调用getName 方法 此时的作用域在prop引用内。

第二个alert 变量t是全局变量,引用指向函数getName,此时的作用域是全局的。

第三个alert t全局调用call 方法第一个参数是设置作用域,此时的作用域改为obj引用内。

典型例子