js提升行为

本文深入探讨了JavaScript中的变量声明提升与函数声明提升的区别,解释了如何处理变量声明与函数声明重名的问题,并详细说明了预编译过程。此外,还介绍了前端跨域问题的原理,以及浏览器同源策略下不同域间的交互限制与解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.js中变量声明提升,函数声明整体提升

2.若变量声明和函数声明重名了,一定是函数声明覆盖变量声明

3.js是解释型语言,即编译一次,执行一次,预编译大部分发生在函数执行前

4.预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译只在解释执行阶段才会进行变量初始化

5.预编译函数执行前

a.创建AO对象(active objec)

b.查找函数形参及函数内变量声明,形参及变量名作为AO对象的属性,值为undefined

c.实参形参相统一,实参值赋给形参

d.查找函数声明,函数名作为AO对象的属性,值为函数引用


预编译(脚本代码块script执行前)

1.查找全局变量声明(包括隐式全局变量声明,省略var声明),变量名作为全局对象的属性,值为undefined

2.查找函数声明,函数名作为全局对象的属性,值为函数引用


前端跨域问题

跨域:只要协议、域名、端口有任何一个不同,都为不同域

1.若协议和端口造成的跨域问题前端不能解决

2.域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip,地址对应着两个域是否在一个ip上

浏览器有同源策略

1.是不能通过ajax的方法去请求不同源中的文档

2.是浏览器中不同域的框架之间是不能进行js的交互操作,不同的框架之间可以获取window对象,但是无法获取相应的属性和方法

3.通过document.domain跨域,可以使用这个将域名设置成相同的,但是要注意,只能把document.domain设置成自身更高一级的父域,且主域必须相同


js中的||将返回第一个不为false的那个值(可以是对象),或者返回最后一个值(若全部都为false的话)











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值