代码片段1:
var arr1 = [1,2,3,4,5]
var arr2 = []
for(var i = 0; i < arr1.length; i ++) {
arr2.push(function(){
alert(i)
})
}
arr2[0]()
此代码在调用arr20方法以后,输出都是5;
执行的顺序是:for循环遍历i为01234;然后调用了5次function函数,但是并没有执行。只在最后的arr20调用,所以,无论[Num]写的几,alert都是5。
代码片段2
var x = 3;
var foo = {
x: 2,
baz: {
bar: function() {
return this.x
}
}
}
Object.prototype.x = 20
var go = foo.baz.bar // 函数体
console.log(go()) // 3
console.log(foo.baz.bar()) // undefined
本题考查的是对this指向的理解,与实际运用。
第一个log是把包含this的函数体赋值给了变量go,该变量前无引用,所有默认指向window,故为3;
第二个log,把包含this的函数体指向了foo.baz;但是该部分没有x值,故为undefined。
代码片段3:
请写出一段去除空白字符的原型方法:
String.prototype.trim = function(){
// return this.replace(/\s/g, "");
return this.split(" ").join("")
}
console.log('a a bc de f'.trim())
这种题也是面试常见题 ,大家要加油!
代码片段4:
var a = 1
function test(){
a=3
return
function a(){
}
}
test();
console.log(a, '--a--')//1
这里的function a() {} 等于 var a = function(){} , 用var声明a,相当于把函数体内部的a私有化了,所以,log的时候,a为1.
代码片段5
排序题也会必考的哦!请根据传入的参数n( ) 对一堆数组(纯数字)按照距离n最近的顺序排列(距离即使数字与n的 差值的绝对值)
var arr = [7, 28, -1, 0, 11, 33]
var sortNum=[]
function sort(n){
for(let i = 0; i<arr.length; i++){
for(let j = i+1; j<arr.length; j++){
if(Math.abs(arr[i] - n) > Math.abs(arr[j] - n)){
console.log(123)
let _temporary = arr[i]
arr[i] = arr[j]
arr[j] = _temporary
}
}
}
console.log(arr, '--排序以后---')
}
sort(8)
代码片段 6
关于正则的一些补充
var str = ' 1中 国我爱你123abc~ . '
var test = (/^1$/g).test('1') //正则.test(字符串);返回true或者false
var test1 = str.search(/\d/)//查找第一个数字的下标
var test2 = str.match('他')//找到返回下标,未找到返回null
var test3 = str.replace(/\s/g, '*')//替换,把所有的空白字符替换成*
console.log(test2, '--str--')
/d --所有数字
/D --除了数字以外
/s -- 空格
/w -- 字母?
/W -- 除了字母
g -- 全局查找
i -- 不去分大小写
代码片段 7
//数组去重
var arr = [1,2,2,3,3,4,5]
arr1=[]
for(let i = 0; i < arr.length; i ++) {
if(arr1.indexOf(arr[i]) < 0) {
arr1.push(arr[i])
}
}
console.log(arr1)
--或 --
利用set自带去重属性
console.log([...new Set(arr)])
代码片段 8
统计字符串中,字母次数
var str = 'aaabbcqweqweqwe'
obj = {}
for(var i =0; i<str.length; i ++ ) {
var v = str.charAt(i)
if( obj[v] == undefined ){ //遍历对象中当前键是否存在
obj[v] = {}
obj[v].count = 1;
obj[v].value = v;
}else {
obj[v].count = ++ obj[v].count
}
}
for(key in obj){
document.write(obj[key].value +'='+obj[key].count+' '); // a=4 b=3 c=4 d=2 f=1 g=1 h=1
}
代码片段9:
var b
console.log(b, '---b---') // 没定义,没赋值 ,此时报undefined
console.log(c, '--c--') //没声明,报c is not defined
代码片段9:
var a = 1
if(!(b in window)){ //此时b为undefined,undefined为windows环境下的一个全局变量
var b = 2
a += 1
}else {
a += 2
}
console.log(a)//3
console.log(b)//undefined
注意: 如果此时,在if条件语句的上方声明b变量并赋值,则b in window结果为false。
代码片段10:
console.log(a,'--a1--') //var: undefined
console.log(b, '---b---') //let:b is not defined; (临时性死区)
var a = 2
let b = 1
function test() {
//函数作用域最顶端,TDZ开始
//这个期间内的任何对变量的操作都会报:ReferenceError引用错误
console.log(a, '--1---') //ReferenceError引用错误
//遇到let后,TDZ结束
let a
console.log(a, '----2---') //undefined
a = 3
console.log(a, '-----3----') //3
}
test()
代码片段11:
var a = 1
function test() {
var a = 2 //此处将同名变量a私有化了
return function (){
a += 1
}
}
var log = test()
log()
console.log(a) // 1 因为访问不到局部变量a