JS基础(9) 作用域

//全局变量

/*var name = "胡歌";

function f(){

name = "霍建华";

}

f();

console.log(name);  //霍建华 

*/

//局部变量  只能在固定代码片段中访问到的变量

//局部变量,先在函数内部的作用域找变量name,如果找到则使用,找不到再去父集作用域找name变量

/*function f(){

var name = "张盛超";

console.log(name);

}

f();

console.log('____' + name);*/ // 出错

//注意事项

//不使用var声明的变量是全局变量

/*function f(){

    name = "张盛超";

console.log(name);

}

f();

console.log('____' + name);*/ //能够输出    不推荐使用

//变量退出作用域后会被销毁,全局变量关闭网页后才会被销毁  就是局部含量在 函数运行后 就被销毁了

//块级作用域  大括号内{}  ES5中无意义  ES6中存在意义

//作用域链

//先于当前作用域找变量 逐层往上找

//只要是代码 就至少有一个作用域 即全局作用域

//凡是代码中有函数  那么在作用域中又可以诞生一个作用域

//函数中如果还有函数 就又声称一个作用域

/*function f1(){

function f2(){

}

var str = "nui";

function f3(){

function f4(){

}

}*/

//此中有三个作用域 存在同级作用域  str也是一个作用域

//如果没有函数 均是全局  if……

//其他语言中变量i 只能在for循环内部访问  JS中为全局变量

/*for (var i = 0; i < 10; i++) {}

console.log(i);*/

/*var color = "yellow";

function getColor(){

var anotherColor = "red";

function swapColor(){

var tmpColor = color;

color = anotherColor;

anotherColor = tmpColor;

}

swapColor();

}

getColor();

console.log(color);*/

</script>

<script id = "预解析">

//概念

//JS代码是由浏览器的JS解析器来执行的

//JS解析器执行JS代码时,分为两个过程:预解析过程和代码执行过程

//预解析的过程

//1、把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值

//2、把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用

//3、先提升var,然后是function

/*console.log(a); //这边会输出undefined

var a = 10;

//相当于

var a;

console.log(a);

a = 10;*/

/*var num1 = 10;

function f1(){

//var num1;

console.log(num1);  //undefined

var num1 = 20;

}

f1();*/

/*console.log(fn2);//输出一个函数

function fn2(){

console.log('我是一个函数');

}

var fn2 = '我是一个变量';  //定义后

console.log(fn2); //输出 我是一个变量*/

//变量提升  定义变量的时候  变量的声明会被提升到作用域最前面  变量的赋值不会提升

//函数提升  将函数声明提至最前 但变量声明先于函数

fn3();

// console.log(num1);  //报错

console.log(num2);  //将上个代码注释掉后  能够输出num2 num3

console.log(num3); 

function fn3(){

var num1 = num2 = num3 = 100;  //因为num2 num3 非 var声明 所以是全局变量

console.log(num1);

console.log(num2);

console.log(num3);

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 11js关系运算符 <!DOCTYPE html> 11js关系运算符 /*关系运算符存在的意义:1、默认情况下,...
    ouyangqinbin阅读 2,860评论 0 0
  • 1. 函数声明和函数表达式有什么区别 使用function关键字声明一个函数时,声明不必放到调用的前面。//函数声...
    _李祺阅读 1,943评论 0 0
  • 简述JavaScript起源起源于美国的Netscape公司,原名为LiveScript,后改为JavaScrip...
    3ab670b99521阅读 8,199评论 0 0
  • 布尔操作符!false //true!"blue" //false!0 //true!NaN //true!...
    左钱钱阅读 3,110评论 0 0
  • 一、数组 数组是一个有序列表,所以有下标. 并且数组在js中可以存在任意类型的数据.并且同一个数组中可以存放不同的...
    空谷悠阅读 3,427评论 0 1