继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JavaScript变量及函数

跃然一笑
关注TA
已关注
手记 277
粉丝 40
获赞 164
什么是函数

函数就是可以重复执行的代码块。

为什么要使用函数

因为一部分代码使用次数可能会很多,所以封装起来,需要的时候调用就可以了。

1.变量和作用域(隐式全局变量和变量声明提升)
1.1变量和作用域(函数中的变量需要函数执行后才能使用)
全局变量(成员变量)

哪里都可以访问到的变量。(进入script立即定义的变量和没有var的变量)

局部变量

函数内部的变量,只有函数内部可以访问到。(函数内部用var定义的变量和形参)

1.2隐式全局变量隐式全局变量就是隐藏的全局变量不好被发现。
function  fn(){var  a  =  b  =  c  =  1;   // b和c就是隐式全局变量}

注意

function  fn(){var  a  =  b  =  c  =  1;   // b和c就是隐式全局变量(等号)var  a = 1;  b = 2;  c = 3;     // b和c就是隐式全局变量(分号)var  a = 1 ,  b = 2 ,  c = 3;    // b和c就不是隐式全局变量(逗号)}
1.3变量声明提升(出现原因:预解析)

函数中,定义变量在使用变量之后。提升变量名,不提升变量值,容易出现undefined。计算后形成NaN。

function fn(){// var aaa;console.log(aaa);var aaa = 1;
}

//提前看一眼这个习惯叫什么呢?  预解析!
//变量声明提升:在预解析的时候,成员变量和函数,被提升到最高位置,方便其他程序访问。
//变量声明提升特点:成员变量只提升变量名,不提升变量值。但是,函数是所有内容全部提升。(function直接定义的)
//函数范围内照样会出现变量声明提升
//什么情况容易出现变量声明提升:使用变量在定义变量之前

1.4 Es6 let和 const 命令

1.let:ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
let声明的变量只在它所在的代码块有效,如下的for循环,let声明的变量只在for循环内的代码块生效(块级作用域),在其外是无法访问到的。

for (let i = 0; i < 10; i++) {  // ...console.log(i);// 0,1,2,3,4,5,6,7,8,9}console.log(i);// ReferenceError: i is not defined

var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,不存在变量提升,否则报错。

// var 的情况console.log(foo); // 输出undefinedvar foo = 2;// let 的情况console.log(bar); // 报错ReferenceErrorlet bar = 2;

2.const:声明一个只读的常量。一旦声明,常量的值就不能改变,就必须立即初始化,不能留到以后赋值。对于const来说,只声明不赋值,就会报错。
const的作用域与let命令相同:只在声明所在的块级作用域内有效,只能在声明的位置后面使用。

if (true) {  const MAX = 5;
}
MAX // Uncaught ReferenceError: MAX is not defined
1.5 返回值问题
  1. 如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined,

  2. 如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值

  3. 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined

  4. 函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。

    //打印函数名,就等于打印整个函数。
    console.log(fn);    //打印执行函数,就等于打印函数的返回值。
    console.log(fn());  //函数中包函数,先执行里面,后执行外面。
    function fn(){        var arr = [1,3,3];
    }

小知识

1函数不调用不执行
2函数名就等于(整个函数),打印函数名,就是等于打印整个函数的代码;打印函数名及括号参数,就是打印该函数的返回值
3加载函数的时候,只加载函数名,不加载函数体
4参数相当于局部变量
5就近原则使用变量
6两个平级的函数中的变量不会相互影响(可以使用同样的形参名)



作者:费莱姆
链接:https://www.jianshu.com/p/9cf67a53274e


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP