Giter Site home page Giter Site logo

dreamapplehappy / hacking-with-javascript Goto Github PK

View Code? Open in Web Editor NEW
214.0 18.0 36.0 216 KB

To be, or not to be, that is a question! :joy: 万剑归宗的无名和独霸天下的雄霸

JavaScript 78.47% HTML 20.50% GCC Machine Description 1.02%
javascript

hacking-with-javascript's Introduction

hacking-with-javascript's People

Contributors

dreamapplehappy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hacking-with-javascript's Issues

字词错误

作者你好,
使用.call(),.apply()或者.bind()改变作用域的部分的第一个列表出现错字
.call()和.apply() .call()和.apply()函数是非常实用的,它们允许你传递一个作用域到一个函数里面,这个作用与绑定了正确的this值. 让我们来处理上面的那些代码吧,让循环里面的this指向正确的元素值:
应该是:
.call()和.apply() .call()和.apply()函数是非常实用的,它们允许你传递一个作用域到一个函数里面,这个作用域绑定了正确的this值. 让我们来处理上面的那些代码吧,让循环里面的this指向正确的元素值:

将数组里面的循环元素link[i]当做参数传递给了.call()方法, 然后我们就改变了哪个立即执行的函数的作用域
应该是:
将数组里面的循环元素link[i]当做参数传递给了.call()方法, 然后我们就改变了那个立即执行的函数的作用域

掌握JavaScript函数的柯里化之泡椒凤爪

泡椒凤爪这段代码感觉有问题:

var _ = {};

function showMsg(name, age, fruit, other) {
    console.log('My name is ' + name + ', I\'m ' + age + ' years old, ' + ' and I like eat ' + fruit + ' and ' + other);
}

function crazyCurryingHelper(fn, length, args, holes) {
    length = length || fn.length;
    args   = args   || [];
    holes  = holes  || [];

    return function() {
        var _args       = args.slice(),
            _holes      = holes.slice();

        // 存储接收到的args和holes的长度
        var argLength   = _args.length,
            holeLength  = _holes.length;

        var allArgumentsSpecified = false;

        // 循环
        var arg     = null,
            i       = 0,
            aLength = arguments.length;

        for(; i < aLength; i++) {
            arg = arguments[i];

            if(arg === _ && holeLength) {
                // 循环holes的位置
                holeLength--;
                _holes.push(_holes.shift());
            } else if (arg === _) {
                // 存储hole就是_的位置
                _holes.push(argLength + i);
            } else if (holeLength) {
                // 是否还有没有填补的hole
                // 在参数列表指定hole的地方插入当前参数
                holeLength--;
                _args.splice(_holes.shift(), 0, arg);
            } else {
                // 不需要填补hole,直接添加到参数列表里面
                _args.push(arg);
            }
        }

        // 判断是否所有的参数都已满足
        allArgumentsSpecified = (_args.length >= length);
        if(allArgumentsSpecified) {
            return fn.apply(this, _args);
        }

        // 递归的进行柯里化
        return crazyCurryingHelper.call(this, fn, length, _args, _holes);
    };
}

var crazyShowMsg = crazyCurryingHelper(showMsg);

crazyShowMsg('dreamapple', _, _, 'oranges')(_, 'apple')(22); // My name is dreamapple, I'm 22 years old,  and I like eat apple

我又加了一个参数,应该返回:
My name is dreamapple, I'm 22 years old, and I like eat apple and orange
但是结果返回:
My name is dreamapple, I'm 22 years old, and I like eat oranges and apple

oranges 和 apple 的顺序反了,应该如何修改?

item 13: 使用立即调用的函数表达式创建新的作用域 (Use Immediately Invoked Function Expressions to Create Local Scopes)

// 测试使用的数组
var testArr = [1, 2, 3];

// @3 使用闭包方式二
function generateFunc2(arr) {
var result = [];
var n = arr.length;
for(var i = 0; i < n; i++) {
(function() {
result[i] = function() {
return arr[i];
}
})()
}
return result;
}
// @3 产生新的函数
var g3 = generateFunc2(testArr);
console.log(g30); // 1
console.log(g31); // 2
console.log(g32); // 3
VM14910:19 undefined
VM14910:20 undefined
VM14910:21 undefined
undefined

chrome版本 54.0.2840.87 m (64-bit)

这里执行的结果还是undefined

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.