《javascript高级程序设计》,javascript高级编程设计
大家好,本文将围绕javascript高级程序设计 javascript权威指南展开说明,javascript高级程序设计在线阅读是一个很多人都想弄明白的事情,想搞清楚javascript高级语言程序设计需要先了解以下几个事情。
一,递归函数
在js中函数自己调用自己,就称为递归。
递归函数的必要条件:
递归方程以及递归结束条件,即给递归函数安排出口,否则会造成无限递归,无限递归会造成执行栈溢出,浏览器会报错Deepl降重。
function fn(e) {
console.log(++e);
if (e === 10) {
return
}
fn(e)
}
fn(0)
二,闭包函数
能够读取其他函数(父函数)内部变量的函数(函数),就成为闭包。
function fn(){
var a = 1
function fn2(){
console.log(a)
}
return fn2
}
var f = fn()
f()
缺点:延长局部变量的生命周期,一些并不需要的变量也不会被释放造成了内存占用问题。
相关:
(1)内存泄漏:
指的是占用的内存没有及时释放,内存泄漏积累过多就容易导致内存溢出.(内存泄漏时
程序还能运行,只是导致可用内存变小)。
(2)内存溢出:
当程序运行需要的内存超过了剩余的内存时,就会抛出内存溢出错误。
三,回调函数
把A函数当成B函数的参数传入调用(在一个函数体内调用另一个函数),就叫回调。
function add(num1, num2, callback){
var sum = num1 + num2;
callback(sum);
}
function print(num){
console.log(num);
}
add(1, 2, print); //=>3
四,构造函数,原型对象,实例对象
构造函数中存在一个prototype属性,这个属性指向它的原型对象;
原型对象中存在一个constructor属性,这个属性指向它的构造函数;
实例对象中存在一个__proto__属性,这个属性指向它的原型对象;
// 构造函数
function Person(name, age) {
this.name = name
this.age = age
}
// 实例对象
let p1 = new Person('张三', 18)
// 静态成员是函数对象的成员
console.log(Person.sex = '男')//静态成员
// 实例成员是实例对象的成员
console.log(p1.name)//实例成员
console.log(p1.age)//实例成员
用代码描述它们之间的关系:
//实例对象通过原型对象找到构造函数
console.log(p1.__proto__.constructor)//Person
//实例对象通过属性指向原型对象,构造函数通过属性也指向原型对象
//如果返回值为true那就证明它们拥有同一个原型对象
console.log(p1.__proto__==Person.prototype)//true
五,bind,call,apply区别
关于call、apply、bind函数,它们主要用来改变this指向的,在很多框架中常有用到,而且也是面试官喜欢问到的问题:多数会问道三者的区别, 以及手动实现它们。
1、相同点
1,三个都是用于改变this指向;
2,接收的第一个参数都是this要指向的对象;
3,都可以利用后续参数传参。
2、不同点
1,call和bind传参相同,多个参数依次传入的;
2,apply只有两个参数,第二个参数为数组;
3,call和apply都是对函数进行直接调用,而bind方法不会立即调用函数,而是返回一个修改this后的函数。
3,用法
//fn.bind的作用是只修改this指向,但不会立即执行fn;会返回一个修改了this指向后的fn。
//需要调用才会执行:bind(thisArg, arg1, arg2, arg3, ...)()。bind的传参和call相同。
fn.bind(thisArg, arg1, arg2, arg3, ...)
//fn.apply的作用和call相同:修改this指向,并立即执行fn。区别在于传参形式不同,apply接受两个参数,
//第一个参数是要指向的this对象,第二个参数是一个数组,数组里面的元素会被展开传入fn,作为fn的参数
fn.call(thisArg, arg1, arg2, arg3, ...)
//调用fn.call时会将fn中的this指向修改为传入的第一个参数thisArg;将后面的参数传入给fn,并立即执行函数fn。
fn.apply(thisArg, [argsArr])
2401_83359489: 你好,我想问下,这个用什么软件完成?
不瘦25斤不换头像: 博主 手机上有什么网站能查看文献
zhizhi949: var demo这块放在哪里啊
chatgpt002: 代码可以运行。