1、写出下面程序的运行结果:
var test = (function (a) {
this.a = a;
return function (b) {
return this.a + b
}
}(function (a, b) {
return a
}(1, 2)))
test(4)
// 5
var test = function (a) {
this.a = a;
return function (b) {
return this.a + b;
}
}(
function (a, b) {
return a; //-> 自执行匿名函数,这一块就是返回个 1
}(1, 2)
);
//简化
var test = function (a) { //又是一个自执行匿名函数
this.a = a;//a 就是1 this === window
return function (b) {
return this.a + b; //this === window
}
}(1);
//再简化
var test = function (b) {
return 1 + b;
};
console.log(test(4));//输出5
分解:
var test = function(a){
this.a = a;
return function(b){
return this.a + b;
}
}
var getA = function(a,b){
return a;
}
test(getA(1,2))(4);
2、写出下面程序的运行结果:
var x = 1,
y = z = 0
function add(n) {
return n = n + 1
}
y = add(x)
function add(n) {
return n = n + 3
}
z = add(x)
console.log(x, y, z)
// 1 4 4
考察点:变量提升:var 声明的变量、function声明的函数在函数执行之前存在变量提升,所以在变量提升阶段,add的值就已经确定指向第二个函数,当函数执行,y=add(x)与z=add(x)都执行的是第二个add函数。
3、
(1)
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = 11
}
alert(typeof bar()) //function
(2)
var a = 1
function a() {}
console.log(a) // 1
(3)
var b = 1
if (true) {
console.log(b) // 1
var b = 2
var c = 3
console.log(c) // 3
}
console.log(b) // 2
console.log(c) // 3
考察重点:变量提升;
var b = 1;
if (true) {
console.log(b)
let b = 2;
let c = 3;
console.log(c)
}
console.log(b)
console.log(c)
扩展:let、const声明的变量存在暂时性死区
扩展:同一作用域下,let和const不能声明同名变量。
4、
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function () {
return this.x
}
}
}
var go = foo.baz.bar
go()
foo.baz.bar()
// 3
// 1
考察点:this的指向。go()执行时this指向window,所以x=3;foo.baz.bar()执行时this指向foo.baz,此时x=1;
5、
console.log([1, 2] + [2, 1])
对象参与加法运算会被toString
,即[1, 2] + [2, 1]
相当于([1, 2]).toString() + ([2, 1]).toString()
,结果就是'1,22,1'
。请注意,这个结果是个字符串。
6、
判断一串字符串是否为回文
var test = '12344321'
var test1 = test.split('').reverse().join('')
console.log(test === test1)
7、
数组去重,数组排序
//去重:
(1)Array.from(new Set([1,2,3,5,2,1,22,'1']))
(2)
var array = [1, 2, 1, 1, '1'];
function unique(array) {
var res = array.filter(function(item, index, array){
return array.indexOf(item) === index;
})
return res;
}
console.log(unique(array));
(3)
function unique(arr) {
arr = arr.sort()
let res = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
res.push(arr[i])
}
}
return res
}
更多去重方式:https://juejin.im/post/5949d85f61ff4b006c0de98b
数组排序总结:https://juejin.im/post/57dcd394a22b9d00610c5ec8#heading-24
8、