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的话)