function functionName(parameters) {
// body
}
函数声明后不会立即执行,会在我们需要的时候调用到。
var x = function (parameters) {
// body
};
js 函数可以通过一个表达式定义. 函数表达式可以存储在变量中
最主要区别是函数名称 在函数表达式中可省略函数声明,从而创建匿名函数
console.log(a)
var a = 1
undefined
func()
function func() {
console.log("hello world")
}
hello world
一个对应于传递给函数的参数的类数组对象。
一个函数通过不同参数列表来实现各个功能,叫函数重载
js中不存在函数重载的概念
var override = function () {
switch (arguments.length) {
case 0 :
console.log("0");break;
case 1 :
console.log("1");break;
case 2 :
console.log("2");break;
}
};
override("hv", "ge")
override("xyhv")
override()
2
1
0
这是js实现重载的传统方法之一
在代码中任何地方都能访问到的对象拥有全局作用域
function doSomething(){
var authorName="星辉"
blogName="星辉的博客"
}
// blogName拥有全局作用域,而authorName在函数外部无法访问到
局部作用域一般只在固定的代码片段内可访问到
例如if条件语句, 就不算一个独立的作用域
通过自执行函数创建临时作用域
function foo() {
var x = 1;
if (x) {
(function () {
var x = 2;
// some other code
}());
}
console.log(x)
}
foo()
1
没有函数名的函数
var mi = function(x) { return 2* x; }
“=”右边的函数就是一个匿名函数,创造完毕函数后,又将该函数赋给了变量mi
(function(x, y){
alert(x + y);
})(2, 3);
在第一个括号内创建了一个匿名函数,第二个括号用于调用该匿名函数,并传入参数
函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕
保证内部作用域中的引用不会被垃圾回收器回收
var object=function(mod){
var field1;
var method1=function(){
};
return{
field1:field1,
method1:method1
}
}(model);
function getInfo(name, age, sex) {
console.log('name', name)
console.log('age', age)
console.log('sex', sex)
console.log(arguments)
arguments[0] = 'valley'
console.log('name', name)
}
getInfo('小辉', 18, '男')
getInfo('辉辉', 16)
getInfo('男')
name 小辉
age 18
sex 男
Arguments(3) ["小辉", 18, "男"]
name valley
name 辉辉
age 16
sex undefined
Arguments(2) ["辉辉", 16]
name valley
name 男
age undefined
sex undefined
Arguments ["男"]
name valley
function sumOfSquares(){
var sum = 0
var arr = [...arguments]
for (var i = 0; i < arr.length; i++) {
sum += arr[i] * arr[i]
}
return sum
}
var result = sumOfSquares(2, 3, 4)
var result2 = sumOfSquares(1, 3)
console.log(result)
console.log(result2)
29
10
function setName(obj) {
obj.name = 'Nicholas'
obj = new Object()
obj.name = 'Greg'
}
var person = new Object()
setName(person)
console.log(person.name)
Nicholas
在函数内部重写 obj 时, 这个变量引用的是一个局部对象 这个局部对象会在函数执行完毕后立即被销毁