您现在的位置是:主页 > news > 偃师 做网站/如何制作网页链接
偃师 做网站/如何制作网页链接
admin2025/4/28 8:24:13【news】
简介偃师 做网站,如何制作网页链接,html代码查看,贸易公司网站建设一、函调调用时,浏览器会传入两个隐含实参 1、任何函数本质上都用通过对象来调用的。如果没有直接指定,就默认为是通过window对象来调用的。2、函数内部有两个隐藏的参数,一个是this,一个是arguments。在调用函数时,浏览器每次都会传递进两个隐含的实参。…
偃师 做网站,如何制作网页链接,html代码查看,贸易公司网站建设一、函调调用时,浏览器会传入两个隐含实参 1、任何函数本质上都用通过对象来调用的。如果没有直接指定,就默认为是通过window对象来调用的。2、函数内部有两个隐藏的参数,一个是this,一个是arguments。在调用函数时,浏览器每次都会传递进两个隐含的实参。…
一、函调调用时,浏览器会传入两个隐含实参
1、任何函数本质上都用通过对象来调用的。如果没有直接指定,就默认为是通过window对象来调用的。2、函数内部有两个隐藏的参数,一个是this,一个是arguments。在调用函数时,浏览器每次都会传递进两个隐含的实参。1) 调用函数的对象. 函数的上下文对象,this对象。2) 封装实参的 arguments 对象。arguments对象是一个可变参。相当于一个数组对象。
>>>>>> 调用函数时,浏览器会传进一个this对象。
function s(){console.log(this)}s();
>>>>>> 调用函数时,浏览器会传进一个封装实参的 arguments 对象
function s(){console.log(arguments);}s(); s(1,2,3);
二、函数中的this对象
1.1 前提
1. 在全局作用域中定义的变量或函数会被当做window的属性来保存。2. 在函数作用域中不使用var关键字定义的变量也会被当做window的属性来保存。
1)s( ) 与 window.s( ) 等价
function s(){c=function ss(){console.log("12")}}s();window.s();
2)c 与 window.c 等价
var s=12;console.log(s);console.log(window.s);c=12;console.log(c);console.log(window.c);
3)obj.say( ) 与 window.obj.say( )等价
var obj={"a":1,"say":function(){console.log("1");}}obj.say();window.obj.say();
4)c( ) 与 window.c( ) 等价
var obj={"a":1,fn:function(){console.log("1");}}var c=obj.fn;c();window.c();
1.2 this
1) this指的是函数执行的上下文对象。即this的最终指向的是直接调用它的对象,就是调用它的上一级对象。2) this指向以函数形式调用,this指向的是window对象。以方法形式调用,this指向的是调用该方法的对象。以构造函数形式调用时(new),this就是新创建的对象。以call()、apply()调用时,this指的是传入的对象。以事件绑定响应函数时,响应函数中的this指向的是绑定的对象。
1)a( )与 window.a( ) 相同,this指的是window对象
function a(){var user = "追梦子";console.log(this.user); //undefinedconsole.log(this); //Window}a();window.a();
a()与window.a() 相同。所有this指的是window对象。
2)o.fn( )与 window.o.fn( ) 相同,this指的是调用它的上一级对象,即o对象。
var o = {user:"追梦子",fn:function(){console.log(this.user); //追梦子}}o.fn();window.o.fn();
o.fn( )与window.o.fn( )。不过this最终指向直接调用它的对象。所以this指向o对象。
3)o.b.fn( ),this指的是b对象
var o = {a:10,b:{a:12,fn:function(){console.log(this.a); //12}}}o.b.fn();
var o = {a:10,b:{// a:12,fn:function(){console.log(this.a); //undefined}}}o.b.fn();
这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,但是this指向的也只是它上一级的对象。尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西。
4)特殊
var o = {a:10,b:{a:12,fn:function(){console.log(this.a); //undefinedconsole.log(this); //window}}
}
var j = o.b.fn;
j();
window.j();
虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window
5)以构造函数形式调用时(new),this就是新创建的对象。
function s(name){this.ss='123';ss='12';console.log(ss)console.log(this.ss)}var obj=new s("12");
6)以call()、apply()调用时,this指的是传入的对象。
function s(){console.log(this)}var obj={'name':'hlp'}s.call(); //默认是window对象s.call(obj); //指的的obj对象
1.3 this原理深层解析
在函数中通过this关键字定义的属性仅仅属于this指向的对象。
function s(){this.age=12}//调用函数,传入window对象给函数中的this。//this.age。相当于window.age。s();console.log(s.age) //undefinedconsole.log(window.age); //12//调用函数,传入s函数对象,此时函数中的this指向s函数对象。//this.age 相当于 s.ages.call(s)console.log(s.age) //12
1.4 this典型应用
>>>>>> 案例1
var name="hlp";function fn1(){console.log(name);}var obj={"name":"123",sayName:fn1}obj.sayName(); //hlp
var name="hlp";function fn1(){console.log(this.name);}var obj={"name":"123",sayName:fn1}obj.sayName(); //123
>>>>>> 案例2(很好的案例)
function Person(color){console.log(this);this.color=color;this.getColor=function(){console.log(this);return this.color}this.setColor=function(color){console.log(this);this.color=color;}}Person("red") //this 指的是windowvar p=new Person("blue") //this 指的是p对象p.getColor(); //this 指的是p对象var obj={}; p.setColor.call(obj,"white") //this 指的是objvar test=p.setColor;test(); //this指wndowfunction fun1(){function fun2(){console.log(this)}fun2();}fun1(); //this指window
三、函数中的 arguments 对象
3.1 arguments 对象
1.arguments对象封装了实参。它是一个可变参。相当于一个数组。2.函数不定义形参,也可以通过arguments对象传递参数。
>>>>>> arguments对象封装了实参。它是一个可变参。相当于一个数组
function s(){for(var i=0;i<arguments.length;i++){console.log(arguments[i])}console.log("---end---");}s(1);s(1,2,3)
>>>>>> 函数不定义形参,也可以通过arguments对象传递参数
function s(){var sum= arguments[0]+arguments[1];console.log(sum)}s(1,2);
3.2 函数传参原理
arguments对象原理:调用函数时,浏览器会传入一个隐含的实参,这个实参就是封装函数参数的arguments对象。函数传参原理:js中调用函数传递参数时,首先会把参数传递给函数内部维护的一个arguments对象。再由arguments对象分配给形参。
function s(a,b){console.log(arguments);console.log('a='+ a +';b='+ b);}s(1,2);