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

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

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

本文相关文章:


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

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

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

2026年7月19日 11:20

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

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

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

2026年7月4日 10:30

更多文章:


timestamp without time zone(Postgresql中to_date()函数使用问题)

timestamp without time zone(Postgresql中to_date()函数使用问题)

各位老铁们好,相信很多人对timestamp without time zone都不是特别的了解,因此呢,今天就来为大家分享下关于timestamp without time zone以及Postgresql中to_date()函数使用问题

2026年9月7日 09:40

网页制作代码特效大全(谁知道网页打字机特效的代码)

网页制作代码特效大全(谁知道网页打字机特效的代码)

大家好,如果您还对网页制作代码特效大全不太了解,没有关系,今天就由本站为大家分享网页制作代码特效大全的知识,包括谁知道网页打字机特效的代码的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月7日 04:20

下载mysql的步骤(win10安装mysql的步骤和方法)

下载mysql的步骤(win10安装mysql的步骤和方法)

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

2026年9月7日 04:10

webstorm怎么读(webstorm文件结构怎么打开)

webstorm怎么读(webstorm文件结构怎么打开)

本篇文章给大家谈谈webstorm怎么读,以及webstorm文件结构怎么打开对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 03:50

nio新特性(Java NIO与IO的区别和比较)

nio新特性(Java NIO与IO的区别和比较)

各位老铁们好,相信很多人对nio新特性都不是特别的了解,因此呢,今天就来为大家分享下关于nio新特性以及Java NIO与IO的区别和比较的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 03:40

checked in(check in和check out的区别)

checked in(check in和check out的区别)

本篇文章给大家谈谈checked in,以及check in和check out的区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 01:20

java经典上机编程题(java上机题 请问这道题应该怎么写)

java经典上机编程题(java上机题 请问这道题应该怎么写)

大家好,java经典上机编程题相信很多的网友都不是很明白,包括java上机题 请问这道题应该怎么写也是一样,不过没有关系,接下来就来为大家分享关于java经典上机编程题和java上机题 请问这道题应该怎么写的一些知识点,大家可以关注收藏,免

2026年9月7日 01:10

影视剧中有哪些剧情颠覆了你的三观?金庸的武侠小说《白马啸西风》为什么没有被拍成电影或者电视剧

影视剧中有哪些剧情颠覆了你的三观?金庸的武侠小说《白马啸西风》为什么没有被拍成电影或者电视剧

各位老铁们,大家好,今天由我来为大家分享白马影视,以及影视剧中有哪些剧情颠覆了你的三观的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年9月7日 00:30

mysql varchar和char的区别(mysql中char、varchar、nvarchar区别)

mysql varchar和char的区别(mysql中char、varchar、nvarchar区别)

各位老铁们,大家好,今天由我来为大家分享mysql varchar和char的区别,以及mysql中char、varchar、nvarchar区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大

2026年9月7日 00:10

linux命令的选项和参数(linux为什么要有参数和选项)

linux命令的选项和参数(linux为什么要有参数和选项)

各位老铁们好,相信很多人对linux命令的选项和参数都不是特别的了解,因此呢,今天就来为大家分享下关于linux命令的选项和参数以及linux为什么要有参数和选项的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月6日 20:20

最近更新

timestamp without time zone(Postgresql中to_date()函数使用问题)
2026-09-07 09:40:07 浏览:0
热门文章

yoga pro 14s carbon(yoga14s接口类型)
2026-07-03 17:50:01 浏览:5
domino directory(帮我翻译一下Recipient’s Domino Directory entry does not specify a valid Notes mail file)
2026-08-03 19:20:01 浏览:4
标签列表