作用域及函数

作用域

概述

限定这个名字的可用性的代码范围就是这个名字的作用域
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突

全局作用域

作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件。

局部作用域

作用于函数内的代码环境,就是局部作用域(只在函数内部起作用)

JS没有块级作用域

变量的作用域

全局变量
全局变量在代码的任何位置都可以使用
在全局作用域下 var 声明的变量 是全局变量
特殊情况下,在函数内不使用 var 声明的变量也是全局变量(不建议使用)
在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存

局部变量
局部变量只能在该函数内部使用
在函数内部 var 声明的变量是局部变量
函数的形参实际上就是局部变量
当代码块运行结束后,就会被销毁,因此更节省内存空间

作用域链 就近原则

预解析

在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。预解析也叫变量、函数的提升
预解析会把变量和函数的声明在代码执行之前执行完成。

变量预解析
变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升

函数预解析
函数的声明会被提升到当前作用域的最上面,但是不会调用函数
注意:函数声明代表函数整体,所以函数提升后,函数名代表整个函数,但是函数并没有被调用!    

函数表达式声明函数问题
函数表达式创建函数,会执行变量提升,此时接收函数的变量名无法正确的调用

函数

函数的概念

封装了一段可被重复调用执行的代码块
目的:实现大量代码的重复使用

函数的使用

声明函数
语法结构:

// 声明函数
function 函数名() {
    //函数体代码
}

function 是声明函数的关键字,必须小写

调用函数

 // 调用函数
函数名();  // 通过调用函数名来执行函数体代码

注意:函数本身并不会执行代码,只有调用函数时才会执行函数体代码。

函数的封装:封装类似于将电脑配件整合组装到机箱中

函数的参数

形参:函数定义时设置接收调用时传入
实参:函数调用时传入小括号内的真实数据
参数的作用 : 在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去。
运用:

 // 带参数的函数声明
function 函数名(形参1, 形参2 , 形参3...) { // 可以定义任意多的参数,用逗号分隔
  // 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3...); 

函数形参和实参数量不匹配时
形等于实 正确
形小于实 只取到形参的个数
形大于实 多的形参定义为undefined
注:
1. 调用的时候实参值是传递给形参的
2. 形参简单理解为:不用声明的变量
3. 实参和形参的多个参数之间用逗号(,)分隔
4. 函数可以带参数也可以不带参数

return 语句

语法结构:

            // 声明函数
function 函数名(){
    ...
    return  需要返回的值;
}
// 调用函数函数名();    // 此时调用函数就可以得到函数体内return 后面的值

在使用 return 语句时,函数会停止执行,并返回指定的值
如果函数没有 return ,返回的值是 undefined
return后面有两个值,返回的结果是最后一个值
使用多分支结构流程时,尽量将每个分支的值return,不然函数接收不到返回值会输出undefined

break ,continue ,return 的区别

break :结束当前的循环体(如 for、while)
continue :跳出本次循环,继续执行下次循环(如 for、while)
return :不仅可以退出循环,还能够返回 return 语句中的值,同时还可以结束当前的函数体内的代码

arguments的使用

是当前函数的一个内置对象,存储了传递的所有实参,表示形式是一个伪数组

伪数组具有以下特点:
1.具有 length 属性
2.按索引方式储存数据
3.不具有数组的 push , pop 等方法
注意:在函数内部使用该对象,用此对象获取函数调用时传的实参。

函数的两种声明方式

自定义函数方式(命名函数)

// 声明定义方式
function fn() {...}
// 调用  
fn();  

调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面

函数表达式方式(匿名函数)

// 这是函数表达式写法,匿名函数后面跟分号结束
var fn = function(){...};
// 调用的方式,函数调用必须写到函数体下面
fn();

fn是变量名,不是函数名
这个fn 里面存储的是一个函数  
函数表达式方式原理跟声明变量方式是一致的
函数调用的代码必须写到函数体后面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值