2025年跨域请求(跨域请求origin为null)

跨域请求(跨域请求origin为null)nbsp 函数声明和变量声明总是会被解释器悄悄地被 提升 到方法体的最顶部 变量声明 命名 提升 在 JS 中 变量有 4 种基本方式进入作用域 语言内置 所有的作用域里都有 this 和 arguments 需要注意的是 arguments 在全局作用域是不可见的 形式参数 函数的形式参数会作为函数体作用域的一部分 函数声明 像这种形式 function foo

大家好,我是讯享网,很高兴认识大家。



 

函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部

变量声明、命名、提升

在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

!兼容
// b();
// var a = function b() {alert(‘this is b’)};
// 则ie下是可以执行b的. 说明不同浏览器在处理函数表达式细节上是有差别的.

 

补充一点函数表达式

定义里面的指定的函数名是不是被提升的

 

大家先看下面一段代码test6,思考一下会打印什么?

||

||

||

|| 输出在下面

||

||

||

||

||

||

what? 什么鬼?为什么是1?
这里需要注意的是,在function b()中,
var = a // function 类型的
a=10; // 重新把10复制给a,  此时的a是function b()中的内部变量
return;
function a() {} // 不会被执行

所以,外面输出的a 依旧是最开始定义的全局变量

 

函数的声明比变量的声明的优先级要高

 

变量解析的顺序

一般情况下,会按照最开始说的四种方式依次解析

  • 语言内置:
  • 形式参数: 
  • 函数声明: 
  • 变量声明: 

也有例外:

  • 内置的名称arguments表现得很奇怪,看起来应该是声明在形参之后,但是却在声明之前。这是说,如果形参里面有arguments,它会比内置的那个优先级高。所以尽可能不要在形参里面使用arguments;
  • 在任何地方定义this变量都会出语法错误
  • 如果多个形式参数拥有相同的名称,最后的那个优先级高,即便是实际运行的时候它的值是undefined;

 

CAO!这么多坑,以后肿么写代码?

用var定义变量。对于一个名称,在一个作用域里面永远只有一次var声明。这样就不会遇到作用域和变量提升问题。

 

由于时间仓促,demo有很多不足之处,多谅解。

 

小讯
上一篇 2025-04-16 18:45
下一篇 2025-05-15 15:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/176701.html