//实现html语法校验功能
function fn (str){
let arr = str.match(/([a-z]+)|((\/)[a-z]+)/g);
let set = new Set();
set.add('img');
let temp = [];
for(let i = 0;i<arr.length;i++){
let flag = /(\/)/.test(arr[i]);
if(!flag&&!set.has(arr[i])){
temp.push(arr[i]);
}else if(set.has(arr[i])){
continue;
}else if(flag){
let s = temp.pop();
let a = arr[i].match(/[a-z]+/);
if(s !== a[0]){
return false;
}
}
}
if(temp.length === 0){
return true;
}
return false;
}
let str = '<div><p><img/></div></p>'
console.log(fn(str));
实现html语法校验功能 反向引用
function fn (str){
let reg = /\<(\w+)\>(.*)\<\/\1\>/;
let temp = reg.exec(str);
if(temp !== null){
return fn(temp[2]);
}else{
if(str === '<img/>'){
return true
}else{
return false
}
}
}
let str = '<div><img/></div>';
let res = fn(str);
console.log(res);
function countStartH() {
const countObj = {};
helper(document.documentElement, countObj);
return countObj;
}
function helper(node, countObj) {
if (node === null) {
return null;
}
const nodeName = node.nodeName;
if (nodeName.toLowerCase().charAt(0) === 'h') {
if (!countObj[nodeName]) {
countObj[nodeName] = 1;
} else {
countObj[nodeName] += 1;
}
}
// 当前元素有子元素
if (node.children.length !== 0) {
// 遍历子元素
for (let i = 0; i < node.children.length; i++) {
helper(node.children[i], countObj);
}
}
}
console.log(countStartH())
函数柯里化
function curry(fn){
var arg = Array.prototype.slice.call(arguments,1); //3
return function(){
var inner = Array.prototype.slice.call(arguments); //5
var final = arg.concat(inner);
return fn.apply(null,final);
}
}
function add(num1,num2){
return num1 + num2;
}
var curriedAdd = curry(add,3);
alert(curriedAdd(5));
实现//const a = add(1)(2)(3) console.log(a.get())//6;
function add(a){
var sum = a;
var fn = function(b){
sum += b;
return fn;
}
fn.get = function(){
return sum;
}
return fn;
}
const a = add(1)(2)(3);
console.log(a.get());
当直接对函数使用 alert() 或 console.log() 时,函数的 toString() 方法会被调用。
打印和相加计算,会分别调用toString或valueOf函数
function s(a) {
return a+1
}
s.toString = function() {
return 111
}
console.log(s)
// f 111
typeof(s)
// "function"
function add(a) {
function s(a) {
return a+1
}
s.toString = function() {
return a
}
return s
}
console.log(add(2)) // f 2
function add(a){
var sum = a;
var s = function (b) {
sum = sum + b;
return s
}
s.toString = function(){
return sum
}
return s
}
console.log(add(3)(4)(5)); // 12