标签:ati person 名称 组成 链接 形式 调用 多个 ++
1.函数声明
2.函数表达式:
- 命名函数表达式
- ```java
var fn = function test(){};
var fn = function(){};
1.函数名称
2.参数(形参、实参)
3.返回值
function a(){
function b(){
}
return b;//保存到外部
}
var demo = a();
demo();
demo();
//a()执行的时候,会定义b,b是在a执行的时候定义,定义的时候会在aAO -- > GO,并且a执行后返回b,b被保存到外部,故这个之后aAO不会被释放,从而造成内存泄露。
function add(){
var count = 0;
function demo(){
count++;
console.log(count);
}
return demo;
}
var counter = add();
counter();
counter();
counter();
function test(){
var num = 100;
function a(){
num++;
console.log(num);
}
function b(){
num--;
console.log(num);
}
return [a,b];
}
var myArr = test();
myArr[0]();//101
myArr[1]();//100
function eater(){
var food = "apple";
var obj = {
eatFood: function () {
if(food != ""){
console.log("eating " + food);
food = ‘‘;
}else{
console.log("it is empty.")
}
},
pushFood: function (myfood) {
food = myfood;
}
}
return obj;
}
var person = eater();
person.eatFood();//eating apple
person.pushFood("banana");
person.eatFood();//eating banana
针对初始化功能的函数
立即执行函数执行完就被销毁。
var num = (function (a,b,c){
var d = a+b+c;
return d;
}(1,2,3));
PS:只有表达式才能被执行符号执行。
var test = function(){};
test();//表达式,可以被执行。
+ function (){
console.log(‘a‘);
}();//可以执行,前面加的+让它变成了表达式。加-也一样的道理。
function test(){
var arr = [];
for(var i = 0;i <10;i++){
arr[i] = function(){
document.write(i+" ");
}
}
return arr;
}
var myarr = test();
for(var j = 0;j < 10;+j+){
myarr[j]();
}//10 10 10 10 10 10 10 10 10 10
//arr里面存的十个元素都是函数体,返回arr后被保存到外部,形成闭包,当myarr = test()执行的时候,arr里面存了十个函数体,最后退出test的时候i=10.当执行myarr[j]的时候,运用的是test()的执行期上下文,而test()退出时,testAO里面的i=10.故输出了10个10.
function test(){
var arr = [];
for(var i = 0;i <10;i++){
(function (j){
arr[j] = function() {
document.write(j+" ");
}
}(i));
}
return arr;
}
var myarr = test();
for(var j = 0;j < 10;j++){
myarr[j]();
}//0 1 2 3 4 5 6 7 8 9
标签:ati person 名称 组成 链接 形式 调用 多个 ++
原文地址:https://www.cnblogs.com/chenyingjie1207/p/9966036.html