(0, eval)("this")

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
var name = "The window";
var object1 = {
name: "My object",
getNameFunc: function(){
var that = (0,eval)("this"); //返回"the window
// var that = this; //返回"My object"
return function(){
// that = this;
return that.name;
};
}
};
alert(object1.getNameFunc()());
</script>
</head>
<body>

</body>
</html>

(0, eval)逗号表达式返回值再调用函数,将引发this值指向全局对象。所以that = (0, eval)("this"),表面上结果为that = this,和直接that = this的形式一样,但是此时的this并非指向object1,而是指向window

时间: 2025-01-02 19:08:18

(0, eval)("this")的相关文章

【转载】(0, eval)(‘this’)

var window = this || (0, eval)('this') 在avalon源码中有这么一行代码,var window = this很容易理解 这里复习一下Global Object: Global Object代表一个全局对象,js中不允许存在独立的函数,变量和常量,它们都是Global Object 的属性和方法,包括内置的属性和方法但是Global Object实际并不存在,它是由window充当这个角色,并且这个过程是在js首次加载时进行的 在一个页面中,首次载入js代码

this, eval(&#39;this&#39;), (0, eval)(&#39;this&#39;))

今天又被一段javascript代码神奇到了 function test() { console.log(this, eval('this'), (0, eval)('this')); }; var a = {}; test.apply(a); 在现代浏览器的console里跑上边的代码,结果应该类似是下边这样 Object {} Object {} Window {top: Window, window: Window, location: Location, external: Object

asp.net bind()和eval()的区别

eval()方法在运行时使用反射执行后期绑定计算,因此与标准的ASP.NET数据绑定方法bind相比,会导致性能明显下降.它一般用在绑定时需要格式化字符串的情况下.多数情况尽量少用此方法Eval 方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回.Bind 方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库.使用 Eval 方法Eval 方法可计算数据绑定控件(如 GridView.DetailsView 和 FormView 控件)的模板中的后期绑定数

浅谈 js eval作用域

就简单聊下如何全局 eval 一个代码. var x = 1; (function () { eval('var x = 123;'); })(); console.log(x); 这个代码得到的是 1 而不是 123如果想让 eval 执行的代码是全局的,那么有几种方法. var x = 1; (function () { window.eval('var x = 123;'); })(); console.log(x); 这个方法标准浏览器都可以得到 123 而IE6-8则依然是 1 相同的

android4.0 hid插入提示

具体原理这里就不说了 我也没理顺 网上有很多文章都说的很清楚 这里我就直接上重点 主要修改文件 frameworks/base/service/java/com/android/server/usb/UsbService.java frameworks/base/service/java/com/android/server/usb/UsbHostManager.java 首先将UsbService.java中的public UsbService(Context context)改为这样 pub

全局作用域 eval

eval是在caller的作用域里运行传给它的代码: var x = 'outer'; (function() { var x = 'inner'; eval('x'); // "inner" })(); 在 ES5,可以分为direct调用或者indirect调用,和是否在strict模式调用 (1,eval)('1+1')  为indirect调用,(1,eval)仍然返回一个eval函数 同样下面这些也是非直接调用: (eval, eval)('...') (1 ? eval :

[Effective JavaScript 笔记]第17条:间接调用eval函数优于直接调用

eval函数不仅仅是一个函数.大多数函数只访问定义它们所在的作用域,而不能访问除此之外的作用域(词法作用域).eval函数具有访问调用它时的整个作用域的能力.编译器编写者首次设法优化js时,eval函数很难高效地调用任何一个函数,因为一旦调用的函数是eval函数,那么每个函数调用都需要确保在运行时整个作用域对eval函数是可访问的.语言标准演化出辨别两种不同的调用eval的方法.第一种方式:函数调用涉及eval标识符,被认为是一种“直接”调用eval函数的方式.编译器需要确保被执行的程序具有完全

C# eval()函数浅谈

<%# Bind("Subject") %> //绑定字段 <%# Container.DataItemIndex + 1%> //实现自动编号<%# DataBinder.Eval(Container.DataItem, "[n]") %>通常使用的方法(这三个性能最好)<%# DataBinder.Eval(Container.DataItem, "ColumnName") %><%# D

ASP.NET Eval四种绑定方式 及详解

1.1.x中的数据绑定语法 <asp:Literal id="litEval2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "userName")%>' /> 2. 2.x简化Eval数据绑定语法 <asp:Literal id="litEval1" runat="server" Text='<