标签:style blog http color io os 使用 ar strong
定义函数的两种方式
function functionName(arg0, arg1,arg2){
//函数体
}
//非标准的name属性
//只在Firefox、Safari、Chrome和Opera有效
特点:
//匿名函数(拉姆达函数)
var functionName = function(arg0, arg1, arg1){
//函数体
};
function factorial(num){
if(num <= 1){
return 1;
}else{
return num * factorial(num - 1); //这里存在隐患
}
}
//下面使其出错
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //出错!
function factorial(num){
if(num <= 1){
return 1;
}else{
// arguments.callee是一个指向正在执行的函数的指针
return num * arguments.callee(num - 1); //这里存在隐患
}
}
//下面使其出错
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //不再出错!
var factoriall = (function f(num){
if(num <= 1){
return 1;
}else{
return num * f(num - 1);
}
});
作用域中引用的变量对象 | 产生 | 消亡 | 作用域链中的位置 | 包含属性 |
全局变量对象 | 创建compare()函数时,会创建一个预先包含全局变量对象的作用域链。 | 关闭网页 | 1 | this、result和compare |
本地活动对象 | 第一次调用cpmpare()时,为函数创建一个执行环境,然后通过赋值函数的[[Scope]]属性中的对象构建起执行环境的作用域链。此后, 活动对象被创建并推入作用域链前端。 | 函数执行完毕后 | 0 | this、arguments、value1和value2 |
/**
* 比较函数
* @param {string|number} value1 用来比较的第一个值
* @param {string|number} value2 用来比较的第二个值
* @return {number} 1、-1、0
*/
function cpmpare(value1, value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
var result = cpmpare(5, 10);
/**
* 创建一个用来比较对象大小的比较函数
* @param {prototypeName} - prototyName
* @return {function} 比较函数
*/
function createComparisionFunction(prototyName){
return function(objec1, object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
};
}
//创建函数
//返回后,作用域链被初始化,包含外部函数createComarisonFunction()的活动对象和全局变量你对象
var compare = createComarisonFunction(‘name‘);
//调用函数
var result = compare({name:‘Nicholas‘}, {name:‘Greg‘});
闭包作用域链中引用的变量对象 | 产生 | 消亡 | 作用域链中的位置 | 包含属性 |
全局变量对象 | 外部函数被执行后 | 关闭网页 | 2 | this、compare、result和ComparisionFunction |
外部函数的本地活动对象 | 外部函数被执行后 | 闭包失去引用 | 1 | prototyName |
本地活动对象 | 闭包被调用时 | 闭包执行完毕 | 0 | this、arguments、value1、value2 |
function createFunctions(){
var result = new Array();
for(var i=0; i<10; i++){
result[i] = function(){
return i;
};
}
return result;
}
function createFunctions(){
var result = new Array();
for(var i=0; i<10; i++){
result[i] = function(num){
return num;
}(i);
}
return result;
}
var name = ‘The Window‘;
var object = {
name:‘My Object‘,
getNameFunc:function(){
return function(){
return this.name;
};
}:
};
alert(object.getNameFunc()()); //‘The Window‘(非严格模式)
var name = ‘The Window‘;
var object = {
name:‘My Object‘,
getNameFunc:function(){
var that = this;
return function(){
return that.name;
};
}:
};
alert(object.getNameFunc()()); //‘ My Object‘
function assignHandler(){
var element = document.getElementById(‘someElement‘);
element.onclick = function(){
alert(element.id);
};
}
function outputNumbers(count){
(function(){
for(var i=0; i<count; i++){
alert(i);
}
})();
alert(i); //导致一个错误
}
function Person(name){
this.getName = function(){
return name;
};
this.setName = function(){
name = value;
};
}
var person = new Person(‘Nicholas‘);
alert(person.getName()); //‘Nicholas‘
person.setName(‘Greg‘);
alert(person.getName()); //‘Greg‘
(function(){
//静态的由所有实例共享的私有变量
var name = ‘‘;
//构造函数
Person = function(value){
name = value;
};
//公共方法
Person.prototype.getName = function(){
return name;
};
//公共方法
Person.prototype.setName = function(value){
name = value;
};
})();
//构造函数一旦创建就会复制外部函数的活动对象并插入到自己的作用域链
//因此每个实例的作用域链都共享外部函数的变量
var person1 = new Person(‘Nicholas‘);
alert(person1.getName()); //‘Nicholas‘
person1.setName(‘Greg‘);
alert(person1.getName()); //‘Greg‘
var person2 = new Person(‘Michael‘);
alert(person1.getName()); //‘Michael‘
alert(person2.getName()); //‘Michael‘
var singleton = {
name:value,
method:function(){
//这里是方法的代码
}
};
var singleton = function(){
//私有变量和
var privateVariable = 10;
//私有函数
function privateFunction(){
return false;
}
return {
publicProperty: true,
publicMethod: function(){
privateVariable++;
return privateFunction();
}
};
}();
var singleton = function(){
//私有变量和私有函数
var privateVarivle = 10;
function privateFunction(){
return false;
}
//创建要返回的对象
var object = new CustomType();
//为要返回的对象添加特权/公有属性和方法
object.publicProperty = true;
object.publicMethod = function(){
privateVable++;
return privateFunction();
};
//返回这个对象
return object;
}();
标签:style blog http color io os 使用 ar strong
原文地址:http://www.cnblogs.com/eli01/p/3980626.html