1,下面两次num输出的值是多少?
<script>
var num = 50;
function f1(num) {
num = 60; // 修改形参 num = 60
console.log(num); // 60
}
f1(num);
console.log(num); // 50
</script>
60,50
2,下面num分别输出多少?
<script>
// 定义两个全局变量
var num1 = 55;
var num2 = 66;
// 函数内两个形参
function f1(num, num1) {
num = 100; // 修改的是形参 num = 100
num1 = 100; // 修改的是形参 num1 = 100
num2 = 100; // 修改的是全局变量 num2 = 100
console.log(num); // 100
console.log(num1); // 100
console.log(num2); // 100
}
// 调用函数
f1(num1, num2); // f1(55, 66)
console.log(num1); // 输出的是全局变量 num1, 55
console.log(num2); // 输出的是全局变量 num2, 100
console.log(num); // 输出的是全局变量num,报错 not defined
</script>
输出:100,100,100,55,报错
3,下面函数调用输出?
<script>
// 两个全局变量 a 和 b
var a = 10;
var b = 20;
function add(a,b){
a = 30;
return a + b;
}
// 调用函数
add(a,b);
console.log(a); // 输出全局变量 a, 10
</script>
输出:第一个调用不输出,第二个输出a=10;
4.下面例子中arr输出多少?
<script>
function f1(arr){
for(var i = 0; i < arr.length; i++){
arr[i] += 2; // arr[i] = arr[i] + 2
}
console.log(arr);
}
var arr;
arr = [1,2];
// 调用
f1(arr); // [3,4]
// 输出的全局变量
console.log(arr); // [3,4]
</script>
5.下面例子输出b的值多少?
<script>
var a = [1,2];
var b = a; // a 地址 赋值给 b
a = [20,2]; // 修改了 a 的指向(原来的引用关系不存在)
console.log(b); // [1,2]
</script>
6.下面表达式输出值分别是?
<script>
// 定义构造函数
function Person(name, age, salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
// 定义f1
function f1(pp) {
pp.name = "ls"; // 通过 pp 修改变量 (改的 pp和p共同引用的对象)
pp = new Person("aa", 18, 10); // 修改了 pp 的指向
}
// 实例化
var p = new Person("zs", 18, 1000);
console.log(p.name); // 输出 'zs'
// 调用函数 f1
f1(p);
console.log(p.name); // 输出 'ls'
console.log(pp.name); // 报错
</script>
输出 zs,ls,报错
7,下面例子中的F,f分别输出?
<script>
Object.prototype.a=function(){
console.log('a');
};
Function.prototype.b=function(){
console.log('b');
}
var F = function(){};
var f = [];
f.a(); // 输出 a
F.a(); // 输出 a
F.b(); // 输出 b
//f.b(); // 没有 报错
console.log(f.b); // 输出 对象中不存在的 属性
f.b(); // undefined()
</script>
8,下面的u.name,u1.name分别输出?
<script>
function User() {
}
User.prototype = {
name: 'aaaa'
};
var u = new User();
console.log(u.name); // aaaa
// 没有修改 User.prototype 的指向
User.prototype.name = 'bbb';
console.log(u.name); // bbb
// 重新给 User.prototype 赋值, 修改了原来的引用指向
// User.prototype 的指向修改了,但是 u.__proto__ 的指向还是原来的
User.prototype = {
name: 'ccc'
};
console.log(u.name); // bbb
var u1 = new User();
console.log(u1.name); // ccc
</script>
分析:
function User(){
}
var u = new User();
u.__proto__ 获取的是u的原型
User.prototype 获取的是User的实例的原型
最后给大家分享一张原型链里面容易模糊的Object ,Function的关系图。
有帮助到的小伙伴,记得一键三连呀!