# 下面代码的输出是什么?
function test(a){
a=a+10;
}
var a=10;
test(a);
console.log(a);
解析
10
a是形参属于局部变量,修改形参不影响全局变量a的值,因此输出的a是全局变量的值10
let x = 10;
let foo = () => {
console.log(x);
let x = 20;
x++;
}
foo();
解析
抛出 ReferenceError
这道题是暂时性死区的问题。只要在一个block里,let是后边定义的,就不能在之前引用该变量。于此同时,也不能去取外层的值了
let node = {
type:"11",
name:"foo",
}
let{type,name,value}=node;
console.log(type,name,value)
答案
11 foo undefined
setTimeout(function(){
console.log(1)
},0)
new Promise(function E(resolve){
console.log(2)
for(var i = 0;i<1000;i++){
i==9999&&resolve()
}
console.log(3)
}).then(function(){
console.log(4)
})
console.log(5)
答案
2 3 5 1
let a =101;
let b = a >100&&(a=70);
let d = (a>50)||(a=25)
console.log(a,b,d)
答案
70 70 true
(function(){
var x=y=1;
})()
console.log(y)
答案
x is not defined
function test(x,y,z){
console.log(test.length);
console.log(arguments.length)
console.log(arguments[2])
}
test(1,2)
答案
3
2
undefined
[] == ![]
答案
true
var b = 123;
if(true){
function b () {}
b = 333;
console.log(b,'?',window.b)
}
console.log(b,window.b)
?
是啥呢🐷
function a() {}
var a
console.log(typeof a)
?
结果为:function
先执行变量提升, 再执行函数提升
if (!(b in window)) {
var b = 1
}
console.log(b)
?
结果为:undefined
var c = 1
function c(c) {
console.log(c)
var c = 3
} //这儿的代码变量提升的时候早就执行好了
c(2)
?
结果为会出错。先执行函数提升,后执行变量提升,最后执行变量赋值,即c = 1,此时typeof c结果为number
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(new Date, i);
}, 1000);
}
console.log(new Date, i);
//如果想要分别在0-4秒输出一个5要怎么做呢
for (var i = 0; i < 5; i++) {
(function(j) { // j = i
setTimeout(function() {
console.log(new Date, j);
}, 1000);
})(i);
}
console.log(new Date, i);
//
var i=8;
for (var i=0;i<5;i++){
setTimeout(function(){
console.log(new Date,i)},i*1000)
}
console.log(new Date,i)//5
var a = function a(){
console.log(a===a)
}
a();//true
我是猪吗🐷为什么不确定
//true
var arr = new Array(5).toString();
console.log(arr)
🐷
//,,,,
var a = {
b:18,
c:{
a:8,
d:function(){
console.log(this.a)
}
}
}
var one = a.c.d
console.log(one());
console.log(a.c.d());
🐷!第二次错了
{b:18,c:{a:8,d:function(){console.log(this.a)}}}
8
var a = {n: 1}
var b = a
a.x = a = {n: 2}
console.log(a.n, b.n);
console.log(a.x, b.x);
解析
var b = a; 此时b和a指向同一个对象. b = {n:1}
.运算符比=运算符高,所以先计算a.x
b = {n:1,x:undefinde}
a.x = a = {n:2}; 计算完a.x,再计算 = ,赋值是从右向左的,此时a指向一个新对象
a = {n=2}
再把结果赋值给a.x,
b = {n:1,x:{n=2}}
var name = 'banana';
(function () {
if (typeof name === 'undefined') {
var name = 'apple'
console.log(name)
} else {
console.log(name)
}
})();
解析
apple
var a = 10;
function test() {
a = 100;
console.log(a);
console.log(this.a);
var a;
console.log(a);
}
test();
解析
100
10
100
var val=1;
var obj={
val:2,
del:function(){
console.log(this);
this.val*=2
console.log(val)
}
}
obj.del();
let name = "banana";
function change(name){
name = "lhz"
}
change(name);
console.log(name)
解析
banana
函数的参数是按值传递的
这个栗子中,name把banana这个值穿给了函数,函数又把这个值赋值给了一个局部变量name,改变这个局部变量并不会影响外部的局部变量。
var test=a=>b=>c=>d=>{return a+b+c+d};
test(1)(2)(3)(4)
解析
10