trackClicksEx function error

case: trackClicksEx๋ผ๋Š” ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๊ฐ€ ์—†๋Š” ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด error๋ฅผ ๋ฟœ๊ณ  ์žˆ์—ˆ๋‹ค. ์šด์˜ํ•˜๋˜ ์‚ฌ์ดํŠธ์˜ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์—†์–ด์„œ trackClicksEx๋ฅผ ์‚ญ์ œํ•˜์ง„ ์•Š๊ณ  ๋นˆ function(){} ์œผ๋กœ return

solution

// ๋นˆ ๊ฐ์ฒด์˜ ํƒ€์ž… ๊ฐ€๋“œ(TypeError ๋ฐฉ์ง€ ์Šคํฌ๋ฆฝํŠธ)
// @๋Œ€์ƒ:  s, trackClicksEx
(function(window) {
    var REQUIRED_GLOBAL_VARS = {
        s: 'object',
        trackClicksEx: 'function'
    };

    var k, v;

    for (k in REQUIRED_GLOBAL_VARS) {
        v = REQUIRED_GLOBAL_VARS[k];

        fillBlankObject(k, v);
    }

    // window ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ฃผ์–ด์ง„ `key`์— ๋Œ€ํ•œ ๊ฐ’์ด ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ
    // `type`์— ๋งž๊ฒŒ ๋นˆ ๊ฐ์ฒด ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    // @param {string} key -- ํ•ด๋‹น ์ „์—ญ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„
    // @param {string} type -- ํ•ด๋‹น ์ „์—ญ ๋ณ€์ˆ˜์˜ ํƒ€์ž… (๊ธฐ๋ณธ๊ฐ’: 'object')
    function fillBlankObject(key, type) {
        type = type || 'object';

        // key๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ ์Šคํ‚ต
        if (!key) {
            return;
        }

        // ํ•„์š”ํ•œ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด
        if (typeof window[key] === 'undefined') {
            window[key] = createEmptyTemp(type);
        }
    }

    function createEmptyTemp(type) {
        type = type.toLowerCase();

        switch (type) {
            case 'function': 
                return function() {};
            break;

            case 'array':
                return [];
            break;

            case 'object':
                return {};
            break;

            case 'string':
                return '';
            break;

            case 'number':
                return 0;
            break;

            default:
                return {};
            break;
        }
    }
})(window);

type of๋Š” ์™œ?

// ํ•„์š”ํ•œ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด
if (typeof window[key] === 'undefined') {
    window[key] = createEmptyTemp(type);
}

typeof๋ฅผ ์“ด ์ด์œ ๋Š”..

var foo;

if (foo === undefined) alert();

์ด๋ ‡๊ฒŒ ์“ธ ๊ฒฝ์šฐ ๋ณ„๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์—†๋‹ค. ํ•˜์ง€๋งŒ

var foo;

if (bar === undefined) alert();

// ์‚๋น… ์—๋Ÿฌ
// ReferenceError: bar is not defined

์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž type of๋ฅผ ์“ฐ์ž

Last updated

Was this helpful?