Should I use get_bloginfo(‘stylesheet_directory’) or get_stylesheet_directory_uri() when enqueueing my js files?

Starting from WordPress 4.7, I would use get_theme_file_uri(), so any child theme can override the file easily: if the file exists in the child theme, get_theme_file_uri() returns the URI to that file, otherwise returns the file in the parent theme:

wp_enqueue_script( 'localScroll', get_theme_file_uri( 'js/jquery.localScroll.min.js' ), array( 'scrollTo' ), '1.2.8b', true );

If you want to hard link to a file in the parent theme not allowing it to be overriden by a child theme, use get_parent_theme_file().

But responding specifically to your question, both methods do the same; in fact, get_bloginfo( 'stylesheet_directory' ) is a wrapper for get_stylesheet_directory_uri() as you can see in the source code:

case 'stylesheet_directory':
    $output = get_stylesheet_directory_uri();
    break;

But I would avoid get_bloginfo() if a specific getter function exists; it may be more consistent in long way.

get_stylesheet_directory_uri() and get_template_directory_uri() still exists, are valid and can be used but those functions should be used only when you need specifically the URI of the shtylesheet/template directory, not a URI to a file.

For example, imaging we have a file located in assets/js/script.js whithin the theme folder; then we can use all of this options:

  1. get_styleseet_directory_uri() . '/assets/js/script.js';
  2. get_template_directory_uri() . '/assets/js/script.js';
  3. get_theme_file_uri( 'assets/js/script.js' );

In a theme with no childs, all three options will output the same URI; but if you develop a child theme:

  1. The option 1 will link to a file in the child theme directory whitout checking if it exists. In this case, we are required to copy the file to the child theme, even if we don’t need to modify it.
  2. The option 2 will link to a file in the parent theme; no options to override it (well, it can be done using some filter hooks, but not in a direct way).
  3. With the option 3 you can leave the file in the parent theme if you are not going to modify it; or you can move the file to the child theme if you need to override it. No extra code is needed. As easy as it is sound.

Internally, get_theme_file_uri()first checks if the file exists in the stylesheet directory, if it exists it returns get_styleseet_directory_uri() . $file;. If the file doesn’t exist in the child theme, then it returns get_template_directory_uri() . $file;. It is like one level up over the other functions.

Along with get_theme_file_uri(), get_theme_file_path() was introduced to get the path to the file instead of the URI; get_parent_theme_file_uri() and get_parent_theme_file_path() are also available but they will always use the parent file files, no matter if a child theme is active.