走入javascript(八)作用域和解析顺序

1.各种数据在alert中弹出时候的表现形式

(1) var a = 10;  ------>  10  number

(2)var a ="100"  -------> 100  string

(3)var a = true   ------->  true boolean

(4)var a = function (){ alert( 1 ) }; -----> 函数快 function

(5)var a = [1,2,3,4,function(){ alert( 1 ) }]; ---> 1,2,3,4,function(){ alert( 1 ) };

各个块中的内容是什么,分别按对应的进行弹出,以逗号隔开。

(6)var a = document; ----> object HTMLDocument   object

(7)var a = document.body;  ---->object HTMLBodyElement  object

(8)var a = document.querySelector(' div ');    ------>  object HTMLDivElement object

object 指明对象的类型为object   HTMLDivElement 指明它是一个什么对象

(9)var a = {

name : "dachui",

age : 18

} ----->  object Object

(10) var a = undefined;  ---> undefined undefined

      (11)var a = null; -----> null object


2.js的解析顺序

js代码是按照作用域的顺序来解读代码

作用域:一个起作用的范围

script标签是最大的作用域,每一个函数在执行的时候,都会产生一个新的作用域,每一个函数都是一个域

每一个域中代码的解析顺序:

(1)定义

找 var 和function

var 只会var出变量名 并不会执行

function (函数定义->函数名) 会定义整个函数体 而不仅仅是名字

(2)执行

从上往下解读代码

3.作用域

(1)全局变量

按照作用域顺序来解读代码

script标签下面的var相对于 window.

eg: var a = 10;   ==== window.a = 10;

即便是不写var 直接 a = 10;它也相当于 window.a = 10; 所以的window.都可以省略

script当前域的所有var都相当于定义在window对象下,也就是说如果你在script域下定义一个变量的话,其实是不需要写var的

b = "100";   ====>   window.b = "100";   ---> 全局变量

但是在实际项目中,尽量要避免全局变量 以防代码污染

(2)局部变量

function goudan(){

var a = 10;  --->局部变量

}

这时候定义出的来 a = 10 在函数的外面是无法访问的 因为函数本身就是一个新的域

4.作用域链

当作用域用到某个变量,但自身没有的时候,会往父作用域去找,知道找到最大的作用域(window位置)停止,如果window也没有就会报错

注意:只可以子作用域往父作用域去找,不可以父作用域往子作用域去找

5.重名问题

(1)俩个变量名重名

同一个作用域下,俩个变量名重名只需要var 一个即可

(2)俩个函数重名

俩个函数重名(函数定义时),后面的覆盖前面的

(3)函数和变量重名

var和函数重名,以函数为准

6.函数的参数问题

定义过程中也包括:函数的参数。

定义过程中,形参不仅仅是定义,还会和实参对应的赋值,形参相当于var了一个局部变量 并且进行了赋值

7.return函数时的作用域

在那里返回,就从原来的地方看作用域

eg:

fn()();

var a = 0;

function fn(){

alert( a );

var a = 3;

function c(){

  alert( a )'

}

return c;

}  -----> undefined 3

分析:

1.定义

var a; function fn(){}

2.赋值

fn()();     ---->  1.定义

var a;

function c(){};

2.执行

alert( a );  ---> undefined

a = 3;

return c;  ---->3

a = 0;

函数和函数并列执行不受任何东西影响,没有任何关系,你执行你的我执行我的

8.if和for作用域的问题

if和for不存在作用域,代码会被定义执行。不论条件真与假 定义过程一定会被定义到,执行过程看条件来执行,预解析

for的执行顺序和if是一样的,都会进行预解析。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值