// 1.
var a=1;
function demoY(n){
n=n+1;
}
y=demoY(a);
function demoZ(n){
n=n+3;
}
z=demoZ(a);
console.log(a);//1
console.log(y);//undefined
console.log(z);//undefined
// 2.
var a1=10;
var b1=20;
console.log('a1+b1='+a1+b1);//执行的结果是:a1+b1=1020
console.log(++a1+b1++);//执行的结果是:31
console.log('a1+b1='+a1+b1);//执行的结果是:a1+b1=1121
//3.
var a='hello';
(function(){
alert(a);//弹出来undefined
var a='wo';
})()//外边也定义啦 里面也定义啦 但是函数里面定义是在alert后面 alert出来的a就近选择函数里面的声明 涉及变量声明会提前 但是赋值在后面才赋值 (我是这么理解的)
4. /*
抛出问题:
此题的目的是想每次点击对应目标时弹出对应的数字下标 0~4,但实际是无论点击哪个目标都会弹出数字5
问题所在:
arr 中的每一项的 onclick 均为一个函数实例(Function 对象),这个函数实例也产生了一个闭包域,
这个闭包域引用了外部闭包域的变量,其 function scope 的 closure 对象有个名为 i 的引用,
外部闭包域的私有变量内容发生变化,内部闭包域得到的值自然会发生改变
*/
var arr = document.getElementsByTagName("p");
for(var i = 0; i<arr.length;i++){
// console.log(i);
(function(){
var temp = i;
arr[i].onclick = function () {
// console.log(this);
alert(temp);
}
})();
}
5.
浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。比如之前说的 DIV#divBox p span.red{color:red;},浏览器的查找顺序如下:
先查找html中所有class='red'的span元素,找到后,再查找其父辈元素中是否有p元素,再判断p的父元素中是否有id为divBox的div元素,如果都存在则匹配上。
6. // 数组中数字转化为最大的正整数
//数组转字符串
var arr=[1,34,23,58,98,58,43];
var str='';
for(let elem of arr){
str+=elem+"";
}
//字符串转数组之后排序
var newarr=str.split('').sort(
function(a,b){
return b-a
});
//字符串转数字类型
console.log(newarr.join(''));