JavaScript学习要点(六)
来源:互联网 发布:python抓取淘宝数据 编辑:程序博客网 时间:2024/05/16 19:31
函数声明提升代表执行代码前会先读取函数声明
但函数表达式并不会被提前读取
编写递归函数时使用arguments.callee比使用函数名更保险,在严格模式下不能通过脚本访问arguements.callee,可以使用命名函数表达式来达成相同的结果
var factorial = (function f(num){
if (num <= 1){
return 1;
}else{
return num*f(num-1);
}
});
闭包是只有权访问另一个函数作用域中的变量的函数
function createFunctions(){
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function(num){
return num;
}(i);
};
return result;
}
通过在返回的函数里调用外部运行环境来返回相应运行环境内的变量
JS中没有块级作用域的概念,从它有定义开始,就可以在函数的内部随处访问它,即便重新定义也没啥用,而且也不会提醒你
模仿块级作用域的方法
(function(){
//这里是块级作用域
})();
当我们需要临时变量的时候就可以采用这种方法
任何在函数中定义的变量都可以认为是私有变量,有权访问私有变量和函数的被称为特权方法
function Person(name){
this.getname = function(){
return name;
};
this.setname = function(value){
name = value;
};
}
var person = new Person("A");
person.getname() //A
person.setname("B")
person.getname() //B
通过使用静态私有变量可以实现方法的共用来避免由于构造函数每个实例都会创建同样的一组方法
在这种方式下,私有变量和函数是由实例共享的,但特权方法定义在原型上,增进了代码复用但每个实例都没有了自己的私有变量
JS通过对象字面量的方式来创建单例对象,使用模块模式返回对象的匿名函数,返回的对象中只包含可以公开的属性和方法,这个对象是在匿名函数内部定义的,所以可以访问私有变量和函数,这个对象字面量定义的是单例的公共接口,可对单例进行某些初始化同时又可维护其私有变量
var application = function(){
var components = new Array();
components.push(new BaseComponent());
var app = new BaseComponent();
app.getComponentCount = function(){
return components.length;
}
app.registerComponent = function(component){
if (typeof components == "object"){
components.push(component)
}
};
return app;
}();
0 0
- JavaScript学习要点(六)
- JavaScript学习要点(一)
- JavaScript学习要点(二)
- JavaScript学习要点(三)
- JavaScript学习要点(四)
- JavaScript学习要点(五)
- JavaScript学习要点(七)
- JavaScript学习要点(八)
- JavaScript学习要点(九)
- JavaScript学习要点(十)
- JavaScript学习要点(十一)
- JavaScript学习要点(十二)
- JavaScript学习要点(十三)
- JavaScript学习(六)
- JavaScript学习(六)
- javascript学习基础要点(一)
- javascript学习基础要点(二)
- javascript学习基础要点(三)
- Android中WebView与JS的交互
- Asteroids!-裸的BFS
- Snail—UI学习之UIButton实现界面跳转及属性传值
- lu值班:拉rb分流
- nyoj 966 选择不相交区间
- JavaScript学习要点(六)
- OSG粒子系统应用:雨雪效果
- 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——理论篇
- 欢迎使用CSDN-markdown编辑器
- 链表(单向)
- 7月随笔
- 架构师成长历程
- git学习笔记2- 初识git
- malloc/free与new/delete的区别