1. 以上 JavaScript 代码,在浏览器中运行的结果是
var foo = {n:1};
(function(foo){
console.log(foo.n);
foo.n = 3;
var foo = {n:2};
console.log(foo.n);
})(foo);
console.log(foo.n);
// 答案: 1 2 3
/**
解析:个人理解,错误勿喷
- 第一步:进行预编译,var全局变量foo、匿名函数 function、var局部变量foo
- 第二步:代码自上而下、自左向右执行计算:
1. 对全局变量foo进行赋值foo={n:1};注意:此值为对象,属于引用类型;
1. 匿名函数传入参数foo={n:1}自执行;
1. console.log(foo.n);打出数字1;var foo 局部变量未赋值被忽略
1. 实参foo.n 被修改为了3,全局foo变量中n的值也为3;
1. 对局部变量foo进行赋值foo={n:2};
1. console.log(foo.n);打出数字2;
1. 全局变量foo={n:3},因此,console.log(foo);打出数字3;
/
2. 假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果为:
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
// 答案: define
//解析:加号优先级高于 三目运算。低于括号。 所以括号中无论真假 加上前边的字符串都为 TRUE 三目运算为TRUE是 输出 define
3. 执行以下程序,输出结果为
function fn(){ var a = b = 1; }
fn();
console.log(b);
console.log(a);
//答案: 1 抛出异常
//解析:b未声明为全局变量, fn函数内的局部变量a被在fn函数外访问,所以报错
4. 请问以下JS代码的执行结构是什么?
let obj = { num1: 117 };
let res = obj;
obj.child = obj = { num2: 935 } //(obj = {num1: 117}).child = {num2: 935}; obj = {num2: 935}
var x = y = res.child.num2; //res = {num1: 117, child: {num2: 935}}
console.log( obj.child ) //obj = { num2: 935}
console.log( res.num1 );
console.log( y, res );
//答案:undefined 117 935
5. 请问一下JS代码的执行结果是什么?
function control(x) {
if( x === 3) throw new Error('break')
}
function foo(x = 6) {
return {
next: () => {
control( x )
return { done: !x, value: x && x-- }
}
}
}
let x = new Object
x[Symbol.iterator] = foo
for(let i of x) console.log( i );
//6 5 4 报错
6. 执行以下程序,输出结果为?
function a(){
console.log(this);
}
a.call(null); //Window
a.call({}); //{}
7. 以下哪些表达式的结果为true
undefined == null //转换为Boolean类型 false == false. true
isNaN("100") //isNaN()底层调用了Number(). false
parseInt("1a") === 1 // number 1 === 1. true
[] instanceof Array //在原型链上. true
//答案:A C D
8. 判断对错
2.toString() // "."被看成了小数点 false
2..toString() // 2. === 2 true
3. eval('var c = 3') //delete c 能够删除成功:在eval中使用var声明的全局变量可以被delete删除
9. 输入什么
var obj = {brand:``'华为'``,price:1999};
Object.defineProperty(obj,``'id'``,{value:1}) //defineProperty为对象设置属性后,该属性的描述符writable 是否可写、configurable是否可删除 以及enumberable 是否可枚举(是否可遍历)默认为false
Object.defineProperty(obj,``'price'``,{configurable:``false``})
console.log(Object.keys(obj).length); ...①
for (``var k ``in obj){
``console.log(obj[k]); ...②
}
obj.price = 999;
delete obj[``'price'``]
console.log(obj); ...③
Object.keys(obj)返回obj对象中自身可枚举属性组成的数组,虽然obj对象新增了id属性,但该属性是不可枚举的,故①式的输出结果为2,A选项错误;使用for...in...循环可以遍历对象可枚举的属性,id属性由于不可枚举,因此仍然不会被遍历到,②式的输出结果为华为 1999,B选项错误;price属性设置了configurable:false,表示该属性不可删除,删改无效,也不可再次修改其特性,但是属性值是可以重写的,因此③式输出结果为{brand: '华为', price: 999, id: 1},C选项正确,
10 以下哪些表达式的值为0?
A. (() => {}).length //形参的个数为0
B. 1 & 2 //按位与 0001 & 0010 同为1才为1
C. +[] //[].valueOf().toString() +'' //0
D. [1,2,-3].reduce((a,b) => a - b, 0)
//答案:ABCD
扩展:
+{} //NaN
+(() => {}) //NaN
+false //0
11. 问一份标准的HTML文档有哪几个必须的HTML标签?
<html>
<head>
<title>
<body>
答案:ABCD