下班回来刷了下javaeye,看见这篇博文
http://my249645546.iteye.com/blog/1716629
觉得写得很好,不由得想起很多自己零零碎碎了解的一些js知识,突然也想记录下来,一方面是回忆一遍加深印象,另一方面以后忘记了可以拿出来翻阅。
1、js的诡异的编译
// 解析器会先解析function xx()这种定义型的函数语句
// 对于所有的var a=xx,浏览器会预编译,声明所有var变量(初始为undefined)
/***** 情况1 :
alert(a);
var a = "window变量: a";
结果:undefined
*/
/***** 情况2 :
alert(a);
var a = "window变量: a";
function a() {}
结果:function a() {}
*/
/***** 情况3 :
alert(a);
//var a = "window变量: a";
//function a() {}
结果:报错
*/
/***** 情况4 :
alert(a);
var a = "window变量: a";
var a = function(){
alert("var型的函数定义,解析类似于var变量定义");
}
结果:undefined
*/
// 还有一种特殊情况
//alert(a); // 报错
//alert(window['a']); // 在window作用域下找不到a,返回undefined
a = "虽然a=''也是window作用域,但是和var a=''有区别。解析器不会预编译一个var a=undefined";
alert(window['a']); //这里可以正常输出
// js 对于函数局部变量的两种情况
function f1() {
var a='函数局部变量,无法访问';
}
f1();
alert(window.a);
function f2() {
b='window变量,可以访问';
}
f2();
alert(b);
2、js模拟一个类
/* 定义一个类,拥有私有属性,get set方法
var Student = function(){
var name;
var getName = function(){
return this.name;
}
var setName = function(name){
this.name = name;
}
var obj = {
name: name,
getName: getName,
setName: setName
}
return obj;
}
var s = Student();
alert(s.getName()); // 结果 undefined
s.setName('new name');
alert(s.getName()); // 结果 new name
*/
/** 符合java习惯,function可看做是构造方法
var Teacher = function(name){
this.name = name;
this.getName = function(){
return this.name;
}
this.setName = function(_name){
this.name = _name;
}
}
var t = new Teacher();
//alert(t.name); // 结果 undefined
t.setName('set方法调用成功');
//alert(t.getName()); // 结果 set方法调用成功
*/
3、apply、call改变作用域
function test(name){
this.name = name || this.name;
alert(this.name);
}
var obj1 = {name: '111'};
var obj2 = {name: '222'};
var obj3 = {name: '333'};
test.call(obj1); // call方式 结果111
test.call(obj2, '222222'); // call方式 方法作用在obj2上 结果222222
test.apply(obj3, ['333333']); // apply方式 方法作用在obj3上 结果333333
自我理解这个有点像java的反射,对于test进行invoke调用,可传入目标对象和方法调用需要的参数。方法体中的this对象就代表目标对象
4、java闭包
// 闭包就是在函数内部定义一个函数,作为其返回值
// 建立起函数内部和外部的桥梁,比如下面的n值,调用两次c(),分别为0 1,
// 而并不是执行完一次以后变量的生命周期也结束了。
// 因为外部对内部函数inner有依赖,内部函数对外部函数里面的局部变量n也有依赖,
// 那么n就需要一直驻留在内存中
function Clazz(){
var n=0;
function inner(){
alert(n++);
}
return inner;
}
var c = Clazz();
c(); // 0
c(); // 1
个人理解:这里相当于闭包返回一个对象c,而n相当于该对象的私有属性,所以n就和c的生命周期一样了
分享到:
相关推荐
经典javascript知识总结.适合有点js基础的,
javaScript知识总结,对JAVA Script的知识进行了一个大概的总结
Javascript学习思维导图xmind格式,查看更方便!
javascript基础知识总结,详细的介绍了基础知识
涉及内容 1:对JS知识各网络的总结 2:JS入门经典一书实例代码与几个额外实例的代码
一个关于音乐的JavaScript项目总结
对html/css/js的一个详细介绍。适合初始的学习,和有使用经验的同学来复习使用。其中案例、文档资料介绍极为详细。
通过思维导图的方式,快速了解掌握JavaScript的基本内容
个人总结 对新学者有帮助,重点地方有颜色标记,好好学习 学无止尽
2.1 JavaScript 操作对象的简单介绍-- 属性和方法 . . . . . . . . 8 2.2 JavaScript 代码的加入 . . . . . . . . . . . . . . 10 2.2.1 加入JavaScript 代码的方式一 . . . . . . . . . . . . . . . . . . . . . . ...
javascript知识点总结《一》
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架。本文给大家分享sea.js知识总结,感兴趣的朋友一起学习吧
javascript基础知识思维导图,js入门必备,学好ES5才能去学ES6,请不要本末倒置。ES5是基础、ES6其实是ES5的技术补充,弥补ES5长久以来的一些痛点,增加语法糖。ES6思维导图,后续更新。
JavaScript基本知识点笔记.doc
JavaScript知识点个人总结
js基础知识点总结-入门级别,适合初学者。
JavaScript语言基础知识点总结,考过试的童鞋都知道什么叫知识点总结吧,很实用哦。是图片格式的因为用思维导图做的
本文包括JavaScript的部分基础知识的总结
JavaScript 语言基础知识点总结(思维导图10张)
JavaScript知识点总结文档,javaScript需要掌握的基本只是内容汇总,一起学习,一起进步