您的位置:首页 > 游戏 > 游戏 > 恩施网站建设模板_总结格式模板_百度收录平台_建站系统哪个比较好

恩施网站建设模板_总结格式模板_百度收录平台_建站系统哪个比较好

2024/12/23 1:13:04 来源:https://blog.csdn.net/weixin_46726346/article/details/144223969  浏览:    关键词:恩施网站建设模板_总结格式模板_百度收录平台_建站系统哪个比较好
恩施网站建设模板_总结格式模板_百度收录平台_建站系统哪个比较好

theme: channing-cyan

1.不要使用eval!

如果你从来都没有用到过eval这个函数,甚至你都不知道这个函数的作用。那么我只能说:你做了一件正确的事情 o.O

虽然我这篇文章要说一下eval函数的一些能力和注意点,但是我希望,如果读者看完了这篇文章。在以后的学习和工作上,如果遇到了某个问题,可千万别想到这篇文章或者eval这个方法。

为什么呢,因为在Javascript初期,这门语言还不完善,所以会用到eval这个方法去解决一些问题。但是Javascript发展到今天这个程度,我们已经不需要使用eval这个方法了。如果你想用这个方法,那么一定有其他更好的方式等着你。

而且,eval这个方法是有安全和性能问题的,所以千万不要使用,当然如果不怕被同事喷的话也可以。

2.eval函数的使用

首先,这个方法的入参是很简单的,就一个字符串。

当这个字符串为表达式的时候,eval函数就返回这个表达式的值。
当这个字符串是语句的时候,eval函数就执行这些语句。

简单吧,看下面的例子:

var a = 2;
eval("a += 2");
console.log(a); // 4let x = eval("1 + 1");
console.log(x); // 1

这个时候,有想法的人就会寻思了,这个eval函数里,好像还能访问变量啊。那他访问的变量是局部的呢?还是全局的呢?

咱们来试一下就知道了:

var x = "global"
function f() {var x = "local";eval("x += 'change'");return x;
}
console.log(f(), x); //localchange global

执行完我们发现,奥原来是这样,eval访问的属性是局部变量。

我们能这么轻易的下结论吗!!!!不能,我们来个花活,看下面代码:

var y = "global";
var geval = eval;
function g() {var y = "local";geval("y += 'changed'");return y
}
console.log(g(), y);  //local globalchanged

wc?你会发现,当我们把eval这个方法赋值给其他变量后,再通过这个变量去调用,他访问的就是全局属性了。

但是捏,在JS中,如果你处在严格模式下,这个eval函数就被管控了,他就只能访问或者更改局部的属性,全局的属性他是改不了滴。

3.eval定义变量

在eval中,我们能否定义一个变量呢?试一下:

eval("var a = 1");
console.log(a); //1

哎!没毛病,那定义变量的话,会不会有全局和局部的问题呢?我们按照刚才的方法也试一下呗:

var a = 2, b = 2
function fn(){eval("var a = 1");geval("var b = 1");console.log(a); //1console.log(b); //1
}
fn()
console.log(a);  //2
console.log(b);  //1

哦莫莫,所以通过geval定义的变量也是全局变量。太吓人了!!!!!

当然,要注意一点,在严格模式下,我们不能通过eval定义变量。只能访问变量或者修改变量。

最后,希望这篇文章对你有所帮助,并且,千万不要使用eval。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com