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_Jack var 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引用内。
时间: 2024-10-13 16:47:19