var n=10;functionuf fun var(){n++; console.log (n); va

请解释一下以下js代码的执行结果_百度知道
请解释一下以下js代码的执行结果
a: 2}console.x).x = a = {
n.log(a;console.log(b,为什么.x);请问两个console的结果是怎么得来的var a = {
n: 1}var b = a
提问者采纳
//&nbsp.log(a,x,变量&要赋的值是&变量&由于变量&b&始终引用那个原来的对象;成员;&1&nbsp:undefined};{n;x&=&{n,x;&nbsp:1;&nbsp,x;引用的对象是&nbsp:1,所以输出&nbsp:undefined}:2}};&nbsp:2};表示要给&//&nbsp:{n;2}//&nbsp,JavaScript引擎首先给&b&a&nbsp,所以&也引用了这个对象&的&nbsp:&nbsp.x&nbsp:1;&经过上面这两句之后;b&{n?//&{n;然后再把&nbsp:1;a:&nbsp,即:1,x;的值是&nbsp,并且让&nbsp:&x&成员var&nbsp:{n:2}}//&{n:1}//&a&undefined都引用了对象&2}//&引用的对象是&的对象//&&nbsp,x;a&成员赋值//&被赋予了一个新的对象;a&{n;&=&由于变量&&&a&{n;x&nbsp,没有&b&nbsp,所以输出&b&接下来要给{n:{n;&nbsp.x);{n;a&nbspvar&引用的那个对象&=&此时;和&nbsp:1}&的值是&{n,所以&&nbsp.x);//&&b&nbsp.log(b,此时变量&nbsp,且这个新对象有一个值为&nbsp:1:2}//&实际上;的新值赋给&a&n&nbsp,x;也就是先让变量&nbsp:1}&=&a&a&nbsp:2}}//&nbsp.x&{n.x//&成员;&的&也引用变量&添加一个空的&所以原来的那个对象变成了&a&a&定义变量&变量&定义变量&nbsp:1}//&a&;下面这句是问题的关键a:2}//&赋的是什么值呢;{n;{n;b&引用一个新的对象&a;{n;&nbsp:undefined}//&nbsp.x&b&为一个新对象:{n;这面这两句是控制台输出=&{n;&{n;//&1}&=&nbsp
提问者评价
来自团队:
其他类似问题
为您推荐:
js代码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁javascript进阶系列专题:闭包(Closure) - 推酷
javascript进阶系列专题:闭包(Closure)
在javascript中,函数可看作是一种数据,可以赋值给变量,可以嵌套在另一个函数中。
var fun = function(){
console.log("平底斜");
function fun(){
function son(){
console.log(n);
我们把上面第二段代码稍微修改下:
function fun(){
function son(){
console.log(n);
看出差别了吗,如果理解不了代码执行结果,请看上一篇博文,关于javascript作用域和作用域链的讲解。
上面这段代码中变量n是全局变量,随时可能被重新赋值,而无需通过fun函数的调用。为了让变量n不受污染,或者说是减少全局变量的污染,我们需要把n放到函数中作为局部变量。
function fun(){
function son(){
console.log(n);
如果我们可以在全局中直接调用son函数,那么便可以达成想要的效果。son函数现在是作为局部变量存在,要想在全局中访问,一般有两种方法:
一种是赋值给全局变量
function fun(){
a = function son(){
console.log(n);
另一种是使用return返回值
function fun(){
return function son(){
console.log(n);
var a=fun();
上面的son()函数就是闭包,某种意义上所有函数都可以看作闭包。闭包就是可以访问外层函数作用域的变量的函数。
function fun(){
a = function son(){
console.log(n);
return a();
还是上面那段代码,我们稍微修改下,再看看执行结果,这是因为每次执行fun()函数时都会初始化变量n。
闭包的好处是减少全局变量,避免全局污染,可以将局部变量保存在内存中。但这既是优点又是缺点,一段代码中如果闭包过多,有可能造成内存泄露。由于闭包中局部变量不会被垃圾回收机制回收,所以需要手动赋值为null(关于内存泄露,后期单独开专题)
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致javascript中闭包(Closure)详解
投稿:hebedich
字体:[ ] 类型:转载 时间:
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。小编之前一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,本文把自己的理解些出来分享一下,希望不理解JavaScript闭包的朋友们看了之后能够理解闭包!
在javascript中,函数可看作是一种数据,可以赋值给变量,可以嵌套在另一个函数中。
var fun = function(){
console.log("平底斜");
function fun(){
function son(){
console.log(n);
fun(); //11
fun(); //11
我们把上面第二段代码稍微修改下:
function fun(){
function son(){
console.log(n);
fun(); //11
fun(); //12
看出差别了吗,如果理解不了代码执行结果,请看上一篇博文,关于javascript作用域和作用域链的讲解。
上面这段代码中变量n是全局变量,随时可能被重新赋值,而无需通过fun函数的调用。为了让变量n不受污染,或者说是减少全局变量的污染,我们需要把n放到函数中作为局部变量。
function fun(){
function son(){
console.log(n);
fun(); //11
fun(); //11
如果我们可以在全局中直接调用son函数,那么便可以达成想要的效果。son函数现在是作为局部变量存在,要想在全局中访问,一般有两种方法:
一种是赋值给全局变量
function fun(){
a = function son(){
console.log(n);
fun(); //son()
另一种是使用return返回值
function fun(){
return function son(){
console.log(n);
var a=fun();
上面的son()函数就是闭包,某种意义上所有函数都可以看作闭包。闭包就是可以访问外层函数作用域的变量的函数。
function fun(){
a = function son(){
console.log(n);
return a();
fun(); //11
fun(); //11
还是上面那段代码,我们稍微修改下,再看看执行结果,这是因为每次执行fun()函数时都会初始化变量n。
闭包的好处是减少全局变量,避免全局污染,可以将局部变量保存在内存中。但这既是优点又是缺点,一段代码中如果闭包过多,有可能造成内存泄露。由于闭包中局部变量不会被垃圾回收机制回收,所以需要手动赋值为null(关于内存泄露,后期单独开专题)
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 js var a function 的文章

 

随机推荐