函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部
变量声明、命名、提升
在JS中, 变量有4种基本方式进入作用域:
- 语言内置: 所有的作用域里都有this和arguments;(需要注意的是arguments在全局作用域是不可见的)
- 形式参数: 函数的形式参数会作为函数体作用域的一部分;
- 函数声明: 像这种形式: function foo() {};
- 变量声明: 像这样: var foo;
变量提升
依次会输出 5 、undefined 、10 因为在解析时候是等价于
接着看另外一个例子:
只有函数级作用域,if语句不会有:test3():
函数的提升
我们写JS的时候,通常会有两种写法:
- 函数表达式 var fn=function fn(){}
- 函数声明方式 function fn(){}
函数表达式需要注意的
- 在function内部,fn完全等于fn1
- 在function外面,fn1则是 not defined
补充一点函数表达式
定义里面的指定的函数名是不是被提升的
大家先看下面一段代码test6,思考一下会打印什么?
||
||
||
|| 输出在下面
||
||
||
||
||
||
所以,外面输出的a 依旧是最开始定义的全局变量
函数的声明比变量的声明的优先级要高
变量解析的顺序
一般情况下,会按照最开始说的四种方式依次解析
- 语言内置:
- 形式参数:
- 函数声明:
- 变量声明:
也有例外:
- 内置的名称arguments表现得很奇怪,看起来应该是声明在形参之后,但是却在声明之前。这是说,如果形参里面有arguments,它会比内置的那个优先级高。所以尽可能不要在形参里面使用arguments;
- 在任何地方定义this变量都会出语法错误
- 如果多个形式参数拥有相同的名称,最后的那个优先级高,即便是实际运行的时候它的值是undefined;
CAO!这么多坑,以后肿么写代码?
用var定义变量。对于一个名称,在一个作用域里面永远只有一次var声明。这样就不会遇到作用域和变量提升问题。
由于时间仓促,demo有很多不足之处,多谅解。
到此这篇跨域请求(跨域请求origin为null)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/33862.html