例如这样的 一个 闭包作用于
$(function(){
var v1 = "想要修改(访问)这个"
function pv1(){
console.log(v1)
}
})
// 有没有什么奇怪的方法在这个作用域拿到 $(function(){} 里的属性?
[v1] = "修改的值"
[pv1](); // 打印出'修改的值' 就对了
javascript 能做到这一点吗?
例如这样的 一个 闭包作用于
$(function(){
var v1 = "想要修改(访问)这个"
function pv1(){
console.log(v1)
}
})
// 有没有什么奇怪的方法在这个作用域拿到 $(function(){} 里的属性?
[v1] = "修改的值"
[pv1](); // 打印出'修改的值' 就对了
javascript 能做到这一点吗?
|
bdbaiDec 4, 2016 via Android
1
闭包里面的变量外面不能访问。你可以让闭包返回一个函数,调用函数修改 v1 的值。
|
|
2
|
|
bdbaiDec 4, 2016 via Android
3
@maomaomao001 让闭包返回一个函数,外面调用函数修改 v1 的值。
|
|
tuxDec 4, 2016
4
刚好碰到同样问题,也没找到办法
但是有一个说法是在 JS 文件加载之前阻止,然后替换成一个修改过的 也就是 JS 劫持 |
|
luowayDec 4, 2016
5
1L 正解
|
|
sensui7Dec 4, 2016 via iPhone
6
所以你其实是想修改一个局部变量。
如果是简单数据类型,修改没意义吧,值引用的。如果是对象,确实可以通过闭包修改。然而正确的做法不是在对象里做接口吗。 结论是你的想法就很独特 |
|
7
@sensui7 主要是想,从外部入侵别人的代码~~~实现修改~~~似乎除了拦截 js 并修改,别无它法~~
|
|
lalalanetDec 5, 2016 via iPhone
8
在老版本浏览器里,你可以把 console.log 重写
|
|
itkdqwzeroDec 5, 2016 via Android
9
用 getter 与 setter
|
|
ianvaDec 5, 2016
10
如果是特殊原因的话,用 hack 点的方法,将这段代码 toString 后在代码里插入相应的 get 方法,然后 eval 就可以跑了
|
|
ianvaDec 5, 2016
11
当然如果不好 toString 的话可以直接拿 script 标签里的文本
如果是写在 script 标签内的可以通过 innerHTML 拿 如果是 js 文件可以用 $.get("hello.js",function(text){alert(text)}) 的方式拿到 后面做匹配插入文本和 eval 就很简单了 |
|
zhuangzhuang1988Dec 5, 2016
12
|
|
13
@ianva 这样是可以跑~~~到是源代码里的环境并没有变啊~~比源代码设置了一个定时器~~~定时比对某个变量~~~
你 eval 运行后只能是一个新的环境,新的定时器,原先的还在继续执行着 |
|
ianvaDec 5, 2016
14
不让他运行的方法太多了,举个例子,比如这个函数,是基于 domready 执行的晚的很,依赖于 jquery ,你在这个代码之前将 var $ = function(){} 就解决问题了,需要的时候引入 jquery ,这是一种方案,思路是不运行咯,当然有各种手段
|