浅谈(0,eval)(‘window’)

yizhihongxing

浅谈(0,eval)('window')

最近研究qiankun 源码,在import-html-entry 包中看到这个,一脸懵,研究了一下,记录一下。参考了这篇博客

这个干啥用的

	// 通过这种方式获取全局 window,因为 script 也是在全局作用域下运行的,所以我们通过 window.proxy 绑定时也必须确保绑定到全局 window 上
	// 否则在嵌套场景下, window.proxy 设置的是内层应用的 window,而代码其实是在全局作用域运行的,会导致闭包里的 window.proxy 取的是最外层的微应用的 proxy
	const globalWindow = (0, eval)('window');
	globalWindow.proxy = proxy;

如代码注释所示,这个是确保获取全局作用域的window

如何做到的

  • eval 直接调用与间接调用。es5规范中指明,间接调用eval是在全局作用域中执行。
  • 哪些是直接调用,哪些是间接调用。简单来说,计算出eval 值,来调用得就是间接调用,如果是引用就是直接调用。看例子
    • 直接调用
eval('...')
(eval)('...')
(((eval)))('...')
(function() { return eval('...') })()
eval('eval("...")')
(function(eval) { return eval('...'); })(eval)
with({ eval: eval }) eval('...')
with(window) eval('...')
  • 间接调用
(1, eval)('...')
(eval, eval)('...')
(1 ? eval : 0)('...')
(__ = eval)('...')
var e = eval; e('...')
(function(e) { e('...') })(eval)
(function(e) { return e })(eval)('...')
(function() { arguments[0]('...') })(eval)
this.eval('...')
this['eval']('...')
[eval][0]('...')
eval.call(this, '...')
eval('eval')('...')
  • 为什么
    • , 运算符,会去最后一个运算数,然后取值
    • =,?: 也是如此
    • 总结来说这些运算符都有一个取值得操作
    • 然而(,)这两个操作符没有取值这个意味。

原文链接:https://www.cnblogs.com/kongshu-612/p/17375980.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈(0,eval)(‘window’) - Python技术站

(0)
上一篇 2023年5月5日
下一篇 2023年5月6日

相关文章

  • js+css实现文字散开重组动画特效代码分享

    下面给出“js+css实现文字散开重组动画特效”的完整攻略。 原理说明 该特效的实现需要使用到CSS 的 transform 属性来进行文字的位移、旋转等操作。同时,通过JS 中的事件绑定实现触发动画效果。 首先将文字拆分为单个的字体元素 随后,通过JS 代码将单个的字体元素进行位置、旋转等方面的定义 当触发动画效果时,JS 代码随机分配位置和角度等属性,并…

    JavaScript 2023年6月10日
    00
  • javascript:;与javascript:void(0)使用介绍

    当我们在HTML中使用”href”属性来定义一个链接时,有时会使用”javascript:”或”javascript:void(0)”作为链接的href值。这两个值虽然都可以用来防止页面跳转,但它们的作用是有所不同的。 “javascript:;” “javascript:;”这个值通常用来防止a标签产生默认跳转行为,因为当a标签的href属性的值为空时,点…

    JavaScript 2023年5月17日
    00
  • JavaScript面向对象编写购物车功能

    当我们在构建一个购物车功能时,可以采用JavaScript面向对象编程的方式来实现。下面是一个完整的攻略: 1. 设计购物车功能 首先要明确购物车的功能和特点,确定购物车所需要存储的数据。 在购物车中,我们需要存储商品的信息,如名称、价格、数量等,同时还需要实现添加、删除、修改商品以及计算购物车总价等功能。 我们可以创建一个Car对象来代表购物车,同时定义一…

    JavaScript 2023年6月11日
    00
  • 基于JS实现弹性漂浮广告的示例代码

    下面是基于JS实现弹性漂浮广告的完整攻略: 思路 使用position: fixed实现元素的固定位置,定义元素距离浏览器顶部的距离。 在需要使用该广告的页面中添加JS文件或script代码段。 通过JS代码,利用setInterval来实现广告元素的动态滚动。 通过监听窗口大小的变化,实现响应式布局,调整广告元素的位置和大小。 代码实现 CSS 定义广告元…

    JavaScript 2023年6月11日
    00
  • 关于JavaScript回调函数的深入理解

    关于JavaScript回调函数的深入理解 什么是回调函数 回调函数是一种在JavaScript中常见的编程模式。它是一个函数,可以作为参数传递给其他函数,以便在其他函数完成之后执行。虽然它非常实用,但许多初学者仍然对回调函数感到困惑。 当我们在使用 JavaScript 编写异步代码时,比如在进行 Ajax 请求时,我们不能直接通过在代码中写入“等待服务器…

    JavaScript 2023年6月10日
    00
  • JavaScrip String对象的方法

    下面是“JavaScript String对象的方法”的详细攻略。 String对象的介绍 在JavaScript中,字符串是一种基本的数据类型,由一个或多个字符组成,用来表示文字和文本数据。String对象是对JavaScript中字符串进行操作、处理和转换的对象。String对象拥有很多实用的方法,可以让我们对字符串进行各种操作和处理。 常用的Strin…

    JavaScript 2023年5月28日
    00
  • 详解如何利用Nodejs构建多进程应用

    对于如何利用Nodejs构建多进程应用,我们可以采用以下的攻略: 1. 为什么要构建多进程应用? 在Nodejs中,主进程只能利用单核CPU的资源,无法充分利用多核CPU的优势,因此,我们可以通过构建多进程应用来实现多核CPU资源的充分利用,提高Nodejs服务器的性能和并发能力。 2. Nodejs的进程模块 在Nodejs中,有一个内置的进程模块chil…

    JavaScript 2023年5月28日
    00
  • 每个 JavaScript 工程师都应懂的33个概念

    “每个 JavaScript 工程师都应懂的33个概念”是一本非常重要的书籍,其中记录了每个JavaScript工程师需要掌握的33个概念。在本文中,我会详细介绍这本书中的每个概念,以及如何应用它们。 1. 理解页面加载和渲染 在这个章节里,作者介绍了关于页面加载过程的一些细节,以及如何优化页面的加载速度。其中提到了减少HTTP请求、使用无阻塞脚本、使用CS…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部