下班回来刷了下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知识总结涵盖了从基础语法到高级特性的多个方面,旨在帮助有一定基础的开发者巩固和扩展他们的JavaScript知识。 1. **创建脚本块**:在HTML文件中,使用`<script>`标签来插入JavaScript代码。...
首先,**javascript知识总结.doc** 可能包含了JS的基础概念、语法结构以及常用API的概述。这部分内容可能涵盖以下几个方面: 1. **基础语法**:包括变量声明(var、let、const)、数据类型(原始类型、引用类型)、...
在这个名为"Javascript知识总结项目"的音乐项目中,我们可以深入探讨JavaScript在构建音乐网站中的应用。该项目可能涵盖了JavaScript的基础概念、DOM操作、事件处理、音频API以及可能的动画效果。 首先,JavaScript...
javaScript知识总结,对JAVA Script的知识进行了一个大概的总结
Javascript学习思维导图xmind格式,查看更方便!
以下是对JavaScript基础知识的总结,主要关注在网页中使用的弹出对话框、函数调用以及带有参数的函数。 1) Alert Box `alert()` 函数用于显示一个包含警告信息的单行对话框,用户只能点击“确定”按钮关闭它。在...
1. JavaScript 的基础知识 在学习 JavaScript 之前,你需要了解 HTML 和 XHTML 的基础。JavaScript 被设计用来向 HTML 页面添加交互行为,通过在 HTML 中插入 JavaScript 代码,可以实现页面元素的动态操作和用户...
通过思维导图的方式,快速了解掌握JavaScript的基本内容
javascript基础知识思维导图,js入门必备,学好ES5才能去学ES6,请不要本末倒置。ES5是基础、ES6其实是ES5的技术补充,弥补ES5长久以来的一些痛点,增加语法糖。ES6思维导图,后续更新。
### JavaScript知识点总结《一》 #### 第一章:初步认识JavaScript ##### 学习目标: - **理解JavaScript的特点** - **学会三种JavaScript的引入方式** ##### JavaScript的特点: 1. **了解特点前:** JavaScript...
### JavaScript基础知识点总结—入门级别 #### 一、JavaScript简介 JavaScript是一种主要应用于网页开发的脚本语言,它能够在客户端运行。通过JavaScript可以为网页添加动态效果,改善用户体验,例如实现网页元素...
本文将围绕“JavaScript知识点总结(思维导图10张)”进行详细解析,涵盖从基础语法到高级特性,帮助你构建完整的JavaScript知识体系。 1. **JavaScript操作符与字符** (Javascript-operational-character.gif) - ...
JavaScript 性能优化的小知识总结
这篇总结涵盖了JavaScript语言的基础知识,帮助初学者快速上手并深入理解这门强大的脚本语言。 首先,我们来看“JavaScript 数据类型”。JavaScript有七种数据类型:Undefined、Null、Boolean、Number、BigInt、...
### JavaScript知识点总结 #### 一、JavaScript的历史与ECMAScript标准 JavaScript 的历史可以追溯到1992年,当时 Nombas 公司开发了一种名为 C-- 的嵌入式脚本语言,并最终更名为 ScriptEase。随着互联网的发展,...
JavaScript 是一种广泛应用于网页开发的编程语言,以下是 JavaScript 的基础知识点总结。 数据类型 在 JavaScript 中,数据类型包括字符串(string)、数值型(number)、布尔型(boolean)、null、undefined 和...
Sea.js是遵循CommonJS规范的JavaScript模块加载框架。CommonJS是服务器端JavaScript的模块化规范,旨在解决JavaScript的模块化问题,Sea.js将这一规范应用到了浏览器端。Sea.js通过简单的API和强大的模块化功能,...
本文将基于“JavaScript语言基础知识点总结十张图”这一主题,深入探讨JavaScript的基础概念、语法特性以及核心知识点。 1. **变量与数据类型** JavaScript有七种数据类型:Undefined、Null、Boolean、Number、...
文档《javascript知识总结.doc》中可能涵盖了以下JavaScript的基础和进阶知识点: 1. **基础语法**:JavaScript的语法与C和Java有相似之处,包括变量声明(var、let、const)、数据类型(字符串、数字、布尔、null...