js函数的声明方式,返回值,参数,作用域。函数规范写法

1.函数声明方式

1.通过function关键字进行声明

function fn(){ }

2.通过函数表达式方式赋值声明

var fn = function(){ }

3.利用构造函数Function声明

var fn = new Function('参数','函数体')
//1.这种写法是将参数列表和函数体放置在了一起同样作为了参数。
//2.如果只有一个参数,那这个参数就是函数体。(就是花括号里面的代码)
//3.构造函数内的参数无论有多少个,始终会将其最后一个参数作为函数体去执行
//4.参数和函数体的语句要作为字符串去呈现

需要注意的是第一种使用‘function’关键字声明的函数,声明会提前(整体提前)。

还有一点是函数重复声明,后面的会覆盖前面的。

2.函数的返回值

  1. 每一个函数都会有一个返回值,这个返回值可以通过关键字“return”进行设置
  2. 若未显式地设置函数的返回值,那函数会默认返回一个undefined
  3. 但若手动地设置了函数的返回值return后,函数将返回开发者手动设置的那个值
  4. 在函数中,一旦执行完成“return”语句,那么整个函数就结束了,后续语句将不再执行;
  5. 就是“return”之后的值只能有一个。如果尝试返回多个值,那得到的结果始终是最后一个值
  6. 如果真的需要函数返回多个值,那就只有将值组合成一个对象或数组进行返回

 3.函数的参数

1.形参 和 实参

形参:声明函数时写得参数

实参:调用函数时传入的参数

函数最后的执行结果是由实参决定的

2.对位传参法

//定义函数
function fn(a,b){
    console.log(a,b)
}
//调用函数
fn(2,1)

  1. 形参与实参是通过位置而不是参数名来匹配对应的
  2. 形参与实参的个数可以不一致
  3. 如果一个形参没有接收到实参传递来的值,那么他为undefined

3.对象传参法 

  1. 当参数非常多时,想要不在通过位置来匹配参数,想让参数具有确定性,那么可以使用对象作为参数,然后就可以通过属性名key来匹配。

 

如果我们在传入实参时忘记输入值,那么函数得到的参数将是一个undefined,我们给参数设置默认值

//ES5方法
//第一种三目运算符设置
function fn(a){
a = (a == undefined) ? 0 : a;
console.log(a);
}
//第二种使用逻辑或设置
function fn1(a){
    a = a || 1;//如果传入的是undefined那么相等于false所以会取第二个默认值
    console.log(a);
}
//第二种方法会有一个弊端那就是除了undefined,传入null,0,'',NAN都等于false都会取到第二个默认值

//ES6方法
//直接在形参上赋值默认值即可
function fn3(a=1){
    console.log(a);
}

Arguments参数列表

 他代表的是函数的所有参数,是一个类似于数组的集合,也可以通过下标获取对应值。

如果我们想要将其转换为数组的话可以使用

1.调用数组原型链上的方法转换

Array.prototype.slice.call(arguments);

2.调用from方法

Array.from(arguments);

4.函数的作用域

JavaScript中分为1.全局作用域 2.函数作用域 3.块级作用域(注意:在ES5中变量作用域只分为两种类型,一种是“全局作用域”,一种是“函数作用域”。在es6里面才拥有块级作用域,即if判断、for循环等语句都有自己独立的作用域)。

1.全局作用域

在当前文件中的所有函数,块中都有效,不管let还是var

//定义全局变量
var test = 666;
function fn(){
    console.log(test);
}
fn();

 2.函数作用域

只在某个函数里面有效,不管是var或者let都可以

function fn(){
    var test = 666;
    console.log(test);
}
fn();
console.log(test);

3.块级作用域

 只在if判断、for循环等语句里面有效,需要使用let关键字声明

for(let i = 0;i < 10;i++){
    console.log(i);
}
console.log(i);

 

  • 访问优先级:里层能访问外层,外层不能访问里层
  1. 块级能访问局部,局部能访问全局,
  2. 全局不能访问局部,局部不能访问块级
  • 访问变量时,先在当前作用域查找,然后在去上层作用域查找

let声明的一些说明

1.let声明的变量具有块级作用域

2.let声明不能够重复声明

3.let声明的变量不会声明提前

 

 

函数规范写法

函数作为一个可以反复被调用的代码块,应该具有其独立性,函数与全局的交流应当只通过参数和返回值,减少对全局的依赖,即不应该直接去获取外面的他所需要的变量等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值