president ={name:"bush"}问题

 以下代码执行后president.name的值是
(function(callback){
    president ={name:"bush"};
    callback(president);
})(function(obj){
    obj.name ="obama";
    obj ={name:"clinton"};
})

答案是什么?求解答。。不是太懂。谢谢。

答案是obama啊

president ={name:"bush"}; 这里最先执行. 执行后, window.president.name就是bush了.

但是后面又执行了callback, 对president的name进行重新赋值为obama.

再后面的对obj重新赋值, 只是使obj不再对president有引用, 而是指向了新的一个object. 不影响president

@Treri 已经正确的回答了,我再详细说一下,。

你的代码可以等价于:

jsfunction foo(obj){
  obj.name ="obama";
  obj = {name:"clinton"};
}

function bar(fn){
  window.president = {name: "bush"};
  fn(president);
}
bar(foo);

具体的 president 的变化是这样的

window.president = {name: "bush"}; // president.name = "bush"
// 开始进入 foo 函数
obj.name ="obama";  // president.name => "obama",这时候 obj 和 president 指向同一个对象

obj = {name:"clinton"}; // obj.name = "clinton", president.name => "obama", obj, president 此时指向不同的对象

提示:你可以使用 chrome dev tool 调试,一步一步看就很明白了。

@杨军军@Treri以上两位大神的解释都没有错,我在他们的基础上补充点。

function foo(obj){
  obj.name ="obama";
  obj = {name:"clinton"};
}

function bar(fn){
  window.president = {name: "bush"};
  fn(president);
}
bar(foo);

这里的重点是编程语言中很重要,但对新手来说也是难点的问题:函数参数是传值还是传引用
其实,最终只有一个传参方式:传值。因为,传引用本质上传的是对象对应的地址。
本题在执行foo函数时,president以参数的形式传给objobjpresident指向同一地址,代表相同对象。但obj指向的改变并不影响president,只是objpresident再无任何关系。
如果还是不懂的话,我可以给题主画图。

时间: 2024-10-12 17:19:49

president ={name:"bush"}问题的相关文章

javascript中的内置对象总结

内置对象 标准内置对象 Object Object.create Object.prototype.toString Object.prototype.hasOwnProperty Boolean String String.prototype.indexOf String.prototype.replace String.prototype.split Number Number.prototype.toFixed Array Array.prototype.splice Array.prot

在git bush中如何退出vim编辑器

写npm的pakege.json文件的files配置时,如果有不想包含的文件,那就要创建.npmignore文件排除,但windows系统又不允许创建以点开头命名的文件,咋办? 这时候就要用到linux命令行工具创建如git bash. git bash创建文件和文件夹的命令如下: #创建文件 vi #创建文件 touch #拷贝文件 cp #移动文件 mv #创建文件夹 mkdir #另外还有好多命令能够创建文件,之要该命令能够重定向输出到一个不存在的#文件,就会创建文件.例如 tail -f

Codeforces Beta Round #6 (Div. 2 Only) B. President's Office

题目大意 给出一个n*m的矩阵 ,描述桌子的布局.总统的桌子和他的副手的桌子相邻,每一个人的桌子有它独有的颜色.问总统有多少个副手. 解题思路 搜出总统的桌子在矩阵中的边界后判断边界外的其它颜色桌子的数量. 题目代码 #include <set> #include <map> #include <queue> #include <math.h> #include <vector> #include <string> #include

CodeForces 567E President and Roads(最短路 + tarjan)

CodeForces 567E President and Roads Description Berland has n cities, the capital is located in city s, and the historic home town of the President is in city t (s?≠?t). The cities are connected by one-way roads, the travel time for each of the road

【CodeForces 567E】President and Roads(最短路)

Description Berland has n cities, the capital is located in city s, and the historic home town of the President is in city t (s ≠ t). The cities are connected by one-way roads, the travel time for each of the road is a positive integer. Once a year t

Codeforces 1179 D - Fedor Runs for President

D - Fedor Runs for President 思路: 推出斜率优化公式后,会发现最优点只可能来自凸斜率中的第一个元素和最后一个元素, 这两个元素不用维护凸斜率也能知道,就是第一个和上一个元素 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi

Git Bush 的安装和使用

Git的安装与使用 1,下载git https://code.google.com/p/msysgit/downloads/list 2,安装git ,我们选择命令行形式,这样无论在window下还是在linux下 都可以. 3,一直next下去就安装完成了. 4,git与bitbucket关联,产生一个公钥(类似与seesion,下回我们git 项目时就不用登录了.). 在开始->所有程序->git->Git Bash  打开gitbash. 会显示如下界面. 5,输入 ssh-key

使用git bush 生成github SSH公钥

1 如果没有安装ssh,那么使用下面的指令 sudo apt-get install ssh 2 检查SSH公钥 cd ~/.ssh 看看存不存在.ssh,如果存在的话,掠过下一步:不存在的请看下一步 3 生成SSH公钥 $ ssh-keygen -t rsa -C "[email protected]" # Creates a new ssh key using the provided email Generating public/private rsa key pair. En

Codeforces Round #Pi (Div. 2) E. President and Roads (最短路+强连通求割边)

题目地址:codeforces #pi (DIV2) E 题目很水..就是先求两边最短路,然后把可能为最短路的边挑出来,然后判断是否yes只需要转化成无向图跑一遍tarjan,找出割边,割边就是yes,然后剩下的边就让它的值为最短路-1就行了,如果-1后变成了非正数,就是no. 但是!!!居然卡spfa!!那是不是说cf以后就不能用可以卡的算法了..完全可以出组数据来卡这些算法...比如spfa,isap... 于是为了这题,又看了一遍迪杰斯特拉算法.. 代码如下: #include <cstd