1.
var foo='123';
function print(){
var foo = '456';
this.foo = '789';
console.log(foo);
}
print();//456
2.
var foo='123';
function print() {
this.foo='789';
console.log(foo);
}
print(); //789
new print(); //123(new之后this不再指向Window)
3.
var a=5;
function test() {
a=0;
console.log(a);
console.log(this.a);
var a;
console.log(a);
}
test(); //0 5 0
new test();// 0 undefined 0
4.
function print() {
console.log(foo);//undefined
var foo=2;
console.log(foo);//2
console.log(hello);//报错
}
print();
5.
function print() {
var test;
test();
function test() {
console.log(1)
}
}
print(); //1
6.
function print() {
var marty={
name:"marty",
printName:function () {
console.log(this.name);
}
}
var test1={name:"test1"};
var test2={name:"test2"};
var test3={name:"test3"};
test3.printName=marty.printName;
var printName2=marty.printName.bind({name:123});
marty.printName.call(test1);//test1调用marty.printName //test1
marty.printName.apply(test2);//test2
marty.printName();//marty
printName2();//123
test3.printName();//test3
}
print();
7.
var bar={a:"002"};
function print() {
bar.a='a';
Object.prototype.b='b';
return function inner() {
console.log(bar.a);//a
console.log(bar.b);//b
}
}
print()();
8.给有序数组乱序
var arr=[1,2,3,4,5,6];
arr.sort(function () {
return (Math.random()-0.5);
})
console.log(arr);
9.按对象的年龄属性排序
var zhang={
name:'zhang',
age:18
}
var zhang2={
name:'zhang2',
age:20
}
var zhang3={
name:'zhang3',
age:17
}
var arr=[zhang,zhang2,zhang3];
arr.sort(function (a,b) {
return a.age-b.age;
})
10.按字节长度排序
function retBytes(str) {//求字节长度
var num=str.length;
for(var i=0;i<str.length;i++){
if(str.charCodeAt(i)>255){
num++;
}
}
return num;
}
var arr=['aadssadfsaf','sss','bbbb','da','dasdasdf'];
arr.sort(function (a,b) {
return retBytes(a)-retBytes(b);
})
11.返回元素e的第n层父节点
var i=document.getElementsByTagName('i')[0];
function retParent(e,n) {
while(e&&n){
e=e.parentElement;
n--;
}
return e;
}
12.
var str="abc";
str+=1;
var test=typeof (str);//test=="string"
if(test.length==6){
test.sign="typeof的返回结果可能为String";
//new String(test).sign="typeof的返回结果可能为String" delete
}
//new String(test).sign
console.log(test.sign);//输出undefined
13.
function Person(name,age,sex) {
var a=0;
this.name=name;
this.age=age;
this.sex=sex;
function sss() {
a++;
console.log(a);
}
this.say=sss;
}
var p1=new Person();
p1.say();//1
p1.say();//2
var p2=new Person();
p2.say();//1
14.
var x=1,y=z=0;
function add(n) {
return n=n+1;
}
y=add(x);
function add(n) {//预编译过程 第二个add覆盖了第一个add
return n=n+3;
}
z=add(x);
console.log(x);//1
console.log(y);//4
console.log(z);//4
15.
var x=1;
if(function f() {})
{
x+=typeof f;
}
console.log(x);//1undefined
16.
var name="222";
var a={
name:"111",
say:function () {
console.log(this.name);//单独执行 this-->window
}
}
var fun=a.say;
fun()//222
a.say()//111
var b={
name:"333",
say:function (fun) {
//this-->b
fun();
}
}
b.say(a.say);//222
b.say=a.say;
b.say();//333
17.立即执行函数 求阶乘
var num=(function (n) {
if(n==1){
return 1;
}
else
return n*arguments.callee(n-1)//arguments.callee=函数引用
}(5))
console.log(num);