function sum() {
if (arguments.length == 2) {
return arguments[0] + arguments[1];
} else if (arguments.length == 1) {
var first = arguments[0];//2
return function(second) {
return first + second;//3
};
}
}
console.log(sum(2,3));//5
console.log(sum(2)(3));//5
var fn = 90;
var o = {
fn: function() {
console.log(fn);
}
}
console.log(o.fn());
function fun(n, o) {
console.log(o)
return {
fun: function(m) {
return fun(m, n);
}
};
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
/*
解析时我用大括号代表作用域:
全局socoped:{
var a=fun(0)
socoped[fun(0)]:{
var n=0;
var o;
console.log(o)//打印undef
return {fun: function(m) {return fun(m, n)}}
socoped[a.fun(1)]:{
var m=1;
return fun(m, n)==> fun(1,0)
}
socoped[a.fun(2)]:{
var m=2
return fun(m, n)==>fun(2,0)
}
socoped[a.fun(3)]{
var m=3;
return fun(m, n)==>fun(3,0)
}
}
a.fun(1);
socoped[a.fun(1)--fun(1,0)]:{
var n=1
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
}
a.fun(2);
socoped:[a.fun(2)--fun(2,0)]{
var n=2
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
}
a.fun(3);
socoped:[a.fun(3)--fun(3,0)]{
var n=3
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
}
}
*/
/*
var b=fun(0).fun(1).fun(2).fun(3)
全局scoped:{
var b=fun(0)
scoped[fun(0)]{
var n=0
var o=undf
console.log(o)//打印undf
return {fun: function(m) {return fun(m, n)}}
scoped[fun(0).fun(1)]{
var m=1
return fun(m, n)==>fun(1,0)
}
}
scoped[fun(0).fun(1)--fun(1,0)]{
var n=1
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
scoped[fun(0).fun(1).fun(2)]{
var m=2
return fun(m, n)==>fun(2,1)
}
}
scoped[fun(0).fun(1).fun(2)--fun(2,1)]{
var n=2
var o=1
console.log(o)//打印1
return {fun: function(m) {return fun(m, n)}}
scoped[fun(0).fun(1).fun(2).fun(3)]{
var m=3
return fun(m, n)==>fun(3,2)
}
}
scoped[fun(0).fun(1).fun(2).fun(3)--fun(3,2)]{
var n=3
var o=2
console.log(o)//打印2
return {fun: function(m) {return fun(m, n)}}
}
}
function Foo() {
getName = function() {
console.log(1);
}
return this;
}
Foo.getName = function() {console.log(2)}
Foo.prototype.getName = function() {console.log(3)}
var getName = function() {console.log(4)}
function getName() {console.log(5)}
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
//(2017-2022每年都有公司的笔试题中出现)
//考点:this 作用域 隐式声明提升 原型 符号优先级
/*
var getName;
function Foo() {
getName = function() {
console.log(1);
}
return this;
}
function getName() {console.log(5)}
Foo.getName = function() {console.log(2)}
Foo.prototype.getName = function() {console.log(3)}
getName = function() {console.log(4)}
Foo.getName();//obj.fn()==>2
getName();//4
getName = function() {
console.log(1);
}
Foo().getName();==>window.getName()//1
getName();//1
new Foo.getName();==>new (Foo.getName) () //2
new Foo().getName();
(new Foo()).getName()
getName = function() {
console.log(1);
}
new Foo()==>{__proto__:Foo.prototype==>{getName:function() {console.log(3)}}}//3
new new Foo().getName();
new ((new Foo()).getName )()
getName = function() {
console.log(1);
}
{__proto__:Foo.prototype==>{getName:function() {console.log(3)}}}//3
*/
var obj1 = new Object();
obj1.name = 'zjzhome';
var obj2 = obj1;
console.log(obj2.name);//'zjzhome'
obj1.name = 'zjz';
console.log(obj2.name);//'zjz'
var a = '' + 3;
var b = 4;
console.log(typeof a); //"string"
console.log(a + b); //"34"
console.log(a - b); //-1 数值类型的字符串可以跟数字减法运算
console.log({} - b) //NaN
var name = 'laruence';
function echo() {
console.log(name);
}
function env() {
var name = 'eve';
echo();//'laruence';
}
env();
var x = 1;
function ScopeTest() {
console.log(x); //undefined
var x = 'hello world';
console.log(x); // hello world
}
ScopeTest();
a = new Array(2, 3, 4, 5, 6);
sum = 0;
for (i = 1; i < a.length; i++)
sum += a[i];
console.log(sum);//18
var f = true;
if (f === true) {
var a = 10;
}
function fn() {
var b = 20;
c = 30;
}
fn();
console.log(a); //10
console.log(b); //代码报错
console.log(c); //30
var fn1 = 'ivan';
var name = 'good';
var fn1 = function(y) {
y();
}
function fn1(x) {
x(name);
}
function fn2(x) {
console.log(x);
console.log(name);
var name = 'hello';
console.log(name);
}
// fn1(fn2);
/*
var fn1
var name
function fn1(x) {
x(name);
}
function fn2(x) {
console.log(x);//un
console.log(name);//un
var name = 'hello';
console.log(name);//"hello"
}
fn1 = 'ivan'
name = 'good'
fn1 = function(y) {
y();
}
fn1(fn2);
var num = 5;
function func1() {
var num = 3;
var age = 4;//6
function func2() {
console.log(num);//unf
var num = 'ivan';
function func3() {
age = 6;
}
func3();
console.log(num);// 'ivan'
console.log(age);//6
}
func2();
}
func1();
function changeObjectProperty(o) {
o.siteUrl = "http://www.csser.com/";
o = new Object();
o.siteUrl = "http://www.popcg.com/";
return o
}
var CSSer = new Object();
var re=changeObjectProperty(CSSer);
console.log(CSSer.siteUrl);
console.log(re.siteUrl)
var x = 8;
var objA = {
x: 'good',
y: 32//5
}
function add(x, y) {
console.log(x.y + y);//8
}
function fn(x, y) {
x.y = 5;
y(x, 3);
}
fn(objA, add);
console.log(objA);//{x:"good",y:5}