js混淆是什么意思(js 变量声明易混淆的几点知识)

:暂无数据 2026-07-22 08:00:02 :3

js混淆是什么意思(js 变量声明易混淆的几点知识)

大家好,js混淆是什么意思相信很多的网友都不是很明白,包括js 变量声明易混淆的几点知识也是一样,不过没有关系,接下来就来为大家分享关于js混淆是什么意思和js 变量声明易混淆的几点知识的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

js 变量声明易混淆的几点知识

变量提升

变量与函数名提升优先级

js 作用域内有变量,这个很好理解,但有一些细节需要注意。

console.log(foo);  // 函数function foo(){
    console.log("函数声明");
}
console.log(foo); // 函数var foo = "变量";
console.log(foo); // 变量

当变量名与函数名同名,且都提升上去了,那最终结果是哪个声明起作用呢?

有两个知识点: 
1. var foo;并不会覆盖之前的变量 
2. 函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖,所以上面的代码实际上是

function foo(){ // 优先级最高,提升到最前面
    console.log("函数声明");
}var foo; // 只提升声明,不提升赋值,且不能覆盖函数声明console.log(foo); 
console.log(foo); 
foo = "变量"; // 可以覆盖函数声明console.log(foo);

连等赋值的变量提升

var num1 = 1;  function   fn(num3){  
    console.log(num1);    //output    undefined  
    console.log(num3);    //output  4  
    console.log(num4);    //throw error  “num4 is not defined”  
    console.log(num2);    //throw error  “num2 is not defined”  
    var num1 = num4 = 2;  // js 连等赋值  num4 不会被提升
    num2 = 3;             // 没有 var 会挂载到全局作用域,但不会提升,所以之前会报错
    var num3= 5;  
}  
fn(4);

if 判断内变量提升

if (true) {  
    function fn(){ return 1; }  
}else {  
     if(false){  
       function fn(){ return 2; }  
     }  
}  
console.log(fn.toString()); 
console.log(fn())

以下是从找到这个例子的原文中摘抄的内容:chrome和ie一均为function fn(){ return 2;},而firefox中依然报错。 
可见三者处理并不相同。ff中会提前变量的声明,但不会提前块级作用域中的函数声明。而chrome和ie下就会提前块级作用域中的函数声明,而且后面的声明会覆盖前面的声明。

函数的作用域内赋值

在js中,提到变量赋值,就要先说作用域,而作用域,在es6之前,只有函数才会形成独立的作用域,然后函数的嵌套形成了 js 的作用域链。子作用域内可以访问父级作用域内的元素。函数的作用域在函数确定的时候就已经确定,与调用无关。

// test1var x = 1;function foo(x) {
  var x = 3;  var y = function() { 
    x = 2;
    console.log(x)
  }
  y();
  console.log(x);  return y
}var z = foo() // 2 2z() // 2

这段函数会输出三个 2 ,指向同一个 x,甚至,将 x 改为对象,就更明显了

// test2var x = "abc";function foo(x) {
  var x = c;  var y = function() { 
    return x;
  }  return y;
}var c = {a:1}var z = foo(); 
var b = z();
console.log(b === c); // true

上面例子中,foo 函数执行后,返回 y 函数并赋值给 z,z 指向 y 函数(函数体),此时,z 并不在 foo 函数的作用域内,在此作用域不能访问到 x,但 z 只是引用类型数据的一个指针,只是同 x 指向了同一个对象而已。而执行 z 函数,则会返回 x 的值,这个值是函数 y 作用域内访问到的 x 的值,是根据函数的书写位置确定的作用域,并不会因为调用位置不同,而改变变量的指向。

但是同时要注意,虽然函数作用域在函数写出来时就已经确定,但具体的值却跟调用的时机有关。

// test3var x = "abc";function foo(x) {
  var x = c;  var y = function() {
    x.a++;    return x;
  }  return y
}var c = {a:1}var z = foo(); 
console.log(z()) // {a: 2}console.log(z()) // {a: 3}console.log(z()) // {a: 4}

这个例子中,输出的三次都是同一个对象,但输出的值不同,这是因为输出的时候的值不同,这就和调用时的实际值有关了。

关于一段JS的解密,我混淆以后就还原不回来了.不知道怎么回事

看样子,这种混淆是不可逆的,是将变量名等,从有含义变成无含义,增加对方阅读代码的难度。如果没有新旧变量名的对照表,应该是无法还原的。

关于js混淆是什么意思,js 变量声明易混淆的几点知识的介绍到此结束,希望对大家有所帮助。

js混淆是什么意思(js 变量声明易混淆的几点知识)

本文编辑:admin

本文相关文章:


单片机unsigned什么意思(为什么单片机编程变量都要定义成unsigned)

单片机unsigned什么意思(为什么单片机编程变量都要定义成unsigned)

这篇文章给大家聊聊关于单片机unsigned什么意思,以及为什么单片机编程变量都要定义成unsigned对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年11月2日 19:30

access变量名的命名规则(在access中为什么y5不可作为变量名)

access变量名的命名规则(在access中为什么y5不可作为变量名)

各位老铁们好,相信很多人对access变量名的命名规则都不是特别的了解,因此呢,今天就来为大家分享下关于access变量名的命名规则以及在access中为什么y5不可作为变量名的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看

2026年9月14日 06:50

linux遍历目录(linux shell 遍历文件夹 并将结果保存 到变量)

linux遍历目录(linux shell 遍历文件夹 并将结果保存 到变量)

本篇文章给大家谈谈linux遍历目录,以及linux shell 遍历文件夹 并将结果保存 到变量对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月11日 22:40

全局变量存储在哪个区(全局变量的存储空间在什么时候分配分配在哪)

全局变量存储在哪个区(全局变量的存储空间在什么时候分配分配在哪)

大家好,关于全局变量存储在哪个区很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于全局变量的存储空间在什么时候分配分配在哪的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有

2026年7月19日 11:20

实例方法和实例变量(实例方法只能访问实例变量)

实例方法和实例变量(实例方法只能访问实例变量)

各位老铁们,大家好,今天由我来为大家分享实例方法和实例变量,以及实例方法只能访问实例变量的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年7月4日 10:30

更多文章:


dos命令清屏(Windows DOS内部命令详解04——del、ren、cls、ver、date、time)

dos命令清屏(Windows DOS内部命令详解04——del、ren、cls、ver、date、time)

“dos命令清屏”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看dos命令清屏(Windows DOS内部命令详解04——del、ren、cls、ver、date、time)!

2026年11月6日 15:40

constantly的用法及词组(英语时态对应的时间状语都有哪些)

constantly的用法及词组(英语时态对应的时间状语都有哪些)

本篇文章给大家谈谈constantly的用法及词组,以及英语时态对应的时间状语都有哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年11月6日 15:20

sql2016安装后如何打开(怎么打开sql server 2016 管理工具)

sql2016安装后如何打开(怎么打开sql server 2016 管理工具)

本篇文章给大家谈谈sql2016安装后如何打开,以及怎么打开sql server 2016 管理工具对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年11月6日 15:10

编程基础指令(数控编程指令有哪些)

编程基础指令(数控编程指令有哪些)

大家好,今天小编来为大家解答以下的问题,关于编程基础指令,数控编程指令有哪些这个很多人还不知道,现在让我们一起来看看吧!

2026年11月6日 12:50

如何运行perl教程(怎样把自己的电脑设置成服务器)

如何运行perl教程(怎样把自己的电脑设置成服务器)

各位老铁们好,相信很多人对如何运行perl教程都不是特别的了解,因此呢,今天就来为大家分享下关于如何运行perl教程以及怎样把自己的电脑设置成服务器的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年11月6日 12:20

arcgis怎么设置文本框样式?用JS怎么实现一个把一个文本框中的选中内容加粗,效果基本上和编辑器的加粗效果相同急需

arcgis怎么设置文本框样式?用JS怎么实现一个把一个文本框中的选中内容加粗,效果基本上和编辑器的加粗效果相同急需

今天给各位分享arcgis怎么设置文本框样式的知识,其中也会对arcgis怎么设置文本框样式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年11月6日 10:50

停止运行的快捷键(电脑怎么停止运行程序快捷键)

停止运行的快捷键(电脑怎么停止运行程序快捷键)

其实停止运行的快捷键的问题并不复杂,但是又很多的朋友都不太了解电脑怎么停止运行程序快捷键,因此呢,今天小编就来为大家分享停止运行的快捷键的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年11月6日 10:40

bios setup(“Bios setup”怎么在电脑里面设置)

bios setup(“Bios setup”怎么在电脑里面设置)

这篇文章给大家聊聊关于bios setup,以及“Bios setup”怎么在电脑里面设置对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年11月6日 10:00

三个表盘都代表什么(卡西欧手表里面三个小表盘是什么意思)

三个表盘都代表什么(卡西欧手表里面三个小表盘是什么意思)

各位老铁们,大家好,今天由我来为大家分享三个表盘都代表什么,以及卡西欧手表里面三个小表盘是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年11月6日 08:10

国产免费的服务器系统(服务器用什么系统)

国产免费的服务器系统(服务器用什么系统)

大家好,关于国产免费的服务器系统很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于服务器用什么系统的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年11月6日 07:50

最近更新

无线鼠标光标乱跑(鼠标乱跑)
2026-11-06 20:30:28 浏览:0
热门文章

新站如何通过网站维护提升SEO排名
2026-10-13 20:56:21 浏览:6
标签列表