网站左侧分类导航菜单,南昌网络营销公司,在线网页转app,泰安招聘网最新招聘信息兼职招聘一、函数 函数声明、函数表达式、匿名函数 函数声明#xff1a;使用function关键字声明一个函数#xff0c;再指定一个函数名#xff0c;叫函数声明。function name () { … } 函数表达式#xff1a;使用function关键字声明一个函数#xff0c;但未给函数命名#xff0c;… 一、函数 函数声明、函数表达式、匿名函数 函数声明使用function关键字声明一个函数再指定一个函数名叫函数声明。function name () { … } 函数表达式使用function关键字声明一个函数但未给函数命名最后将匿名函数赋予一个变量叫函数表达式。var name function(){ ... } 匿名函数使用function关键字声明一个函数但未给函数命名所以叫匿名函数。function () { ... } 调用时的区别 name(); //正常因为‘提升了函数声明函数调用可在函数声明之前
function name(){ ... }name(); //报错变量name还未保存对函数的引用函数调用必须在函数表达式之后
var namefunction(){ ... } 函数参数传递方式按值传递 我们知道函数的参数在进入函数后实际是被保存在了函数的变量对象中因此这个时候相当于发生了一次复制。 var a 20;
function fn(a) {a a 10;return a;
}
fn(a);
console.log(a); // 20var a { m: 10, n: 20 }
function fn(a) {a.m 20;return a;
}
fn(a);
console.log(a); // { m: 20, n: 20 } 函数参数传递方式是按值传递只不过当我们期望传递一个引用类型时真正传递的只是这个引用类型保存在变量对象中的引用而已。 二、立即执行函数 两种javascript立即执行函数的常见写法。 (function(){…
})() //(...)()形式(function(){…
}()) //(...())形式 在函数的后面加上括号就能变成立即执行函数吗 1.函数表达式后面加括号 var namefunction(){alert(Hello World);
}(); //函数表达式。后面加括号当javascript引擎解析到此处时能立即调用函数 2.匿名函数后面加括号 function(){console.log(Hello World);
}(); //匿名函数方式。后面加括号报语法错误。虽然匿名函数属于函数表达式但是未进行赋值操作所以javascript引擎将开头的function关键字当做函数声明报错要求需要一个函数名。 3.函数声明方式后面加括号 function name(){alert(Hello World);
}(); //函数声明方式此时相当于对匿名函数加了名字。后面加括号还是报错Uncaught SyntaxError: Unexpected token )。在一个表达式后面加上括号()该表达式会立即执行但是在一个语句后面加上括号()它的意思只是分组操作符。 function name(){ alert(Hello World); }(1); //如果在括弧()里传入一个表达式将不会有异常抛出.但是函数依然不会执行。因为它完全等价于在一个function声明后面又声明了一个毫无关系的表达式 回头看看( function(){…} )()和( function (){…} () )要在函数体后面加括号就能立即调用则这个函数必须是函数表达式不能是函数声明。 所以只需要用大括弧将代码括住就行了因为JavaScript里括弧()里面不能包含语句所以在这一点上解析器在解析function关键字的时候会将相应的代码解析成function表达式而不是function声明。 (function(a){console.log(a); //123
})(123); //后面括号里传入了函数执行的参数。如果这个参数是外部的变量将会形成闭包。这个变量也会保存在这个函数中。 三、模块 提到立即执行函数总会想到模块因为模块通常用立即执行函数的方式去创建。 一个模块可以包括私有变量、私有方法、公有变量、公有方法。 (function() {// 私有变量var age 20;var name Tom;// 私有方法function getName() {return your name is name;}// 公有方法function getAge() {return age;}// 将公有方法引用保存在外部执行环境的变量中形成闭包防止该执行环境被垃圾回收window.getAge getAge;
})(); 转载于:https://www.cnblogs.com/lishuxue/p/6588234.html