function optionalidentifier(fnparam) {
        if (nexttoken.identifier) {
            advance();
            if (token.reserved && !option.es5) {
                // `undefined` as a function param is a common pattern to protect
                // against the case when somebody does `undefined = true` and
                // help with minification. More info: https://gist.github.com/315916
                if (!fnparam || token.value !== 'undefined') {
                    warning("Expected an identifier and instead saw '{a}' (a reserved word).",
                            token, token.id);
                }
            }
            return token.value;
        }
    }
function optionalidentifier(fnparam) {
        if (nexttoken.identifier) {
            advance();
            if (token.reserved && !option.es5) {
                
                
                
                if (!fnparam || token.value !== 'undefined') {
                    warning("Expected an identifier and instead saw '{a}' (a reserved word).",
                            token, token.id);
                }
            }
            return token.value;
        }
    }
function optionalidentifier ( fnparam ) { if ( nexttoken . identifier ) { advance ( ) ; if ( token . reserved && ! option . es5 ) { // `undefined` as a function param is a common pattern to protect // against the case when somebody does `undefined = true` and // help with minification. More info: https://gist.github.com/315916 if ( ! fnparam || token . value !== 'undefined' ) { warning ( "Expected an identifier and instead saw '{a}' (a reserved word)." , token , token . id ) ; } } return token . value ; } }
fnparam means that this identifier is being defined as a function argument (see identifier())
fnparam means that this identifier is being defined as a function argument ( see identifier () )